行业知识
蓝桥杯倒计时 36天-DFS练习2
2026-11-15 10:21:31
来源:互联网转载
文章目录
- 黄金二叉树
- ���沌之力2
黄金二叉树
思路一:递推做法
#includeusing namespace std;const int N = 1e5+10;int A[N];int B[N];int n,sum;int main( ){ cin>>n; for(int i=1;i>A[i]; int left,right; for(int i=1;i cin>left; cin>>right; if(left>0)B[left]=B[i]+1;//如果节点 i 有左子节点,计算左子节点的黄金指数 if(right>0)B[right]=B[i]-1;//如果节点 i 有右子节点,计算左子节点的黄金指数 if(B[i]==0)sum+=A[i];//如果节点 i 黄金指数 为 0,将权重加起来 } cout int res = (j == k) ? w[u] : 0; //如果黄金指数为 0,加入权值 if(l[u]!=-1)res += dfs(l[u],j+1,k);//如果有左节点,搜索左节点,黄金指数+1。 if(r[u]!=-1)res += dfs(r[u],j,k+1);//如果有右节点,搜索右节点,黄金指数+1。 return res;}int main( ){ cinn; for(int i=1;i>w[i]; for(int i=1;i>l[i]>>r[i]; cout1,0,-1,0},dy[ ] = {0,1,0,-1};int colors[N][N];//涂色void dfs(int x,int y,int color){ colors[x][y]=color; for(int i=0;i int nx = dx[i]+x,ny = dy[i]+y; if(nx int color = 0; for(int i=0;i int nx = dx[i]+x,ny = dy[i]+y; if(nx cinnm; cinx>>y>>x2>>y2; x--,y--,x2--,y2--; for(int i=0;i>mp[i]; dfs(x,y,1); //源点能直接到达终点 if(colors[x2][y2]==1){puts("Yes"),return 0;}//输出后一定要 return 返回 dfs(x2,y2,2); for(int i=0;i for(int j=0;j if(mp[i][j]=='#'){ //墙是否间隔源点和终点 if(check(i,j)){ puts("Yes"),return 0;//输出后一定要 return 返回 } } } } //没有符合条件的答案 puts("No"); return 0;}