糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 水管工游戏 (深搜)

水管工游戏 (深搜)

时间:2020-08-31 15:22:45

相关推荐

水管工游戏 (深搜)

水管工游戏

本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可。

代码如下:

#include<stdio.h>int a[51][51];int book[51][51],n,m,flag=0,top=0;void dfs(int x,int y,int front); struct note{int x;int y;}s[100];int main(void){int i,j,num=0;scanf("%d%d",&n,&m);for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&a[i][j]);}}dfs(1,1,1);if(flag==0){printf("impossible\n");}else{printf("\n");}return 0;}void dfs(int x,int y,int front)//front 的值为 1 ,2 ,3 ,4 分别表示进水口的位置在 左,上,右,下{int i; /* 测试当前栈内坐标 */// for(i=1;i<=top;i++)// {// printf("(%d,%d)",s[i].x,s[i].y);// }// printf("\n"); if(x==n&&y==m+1) //此处的判定条件为 m+1{flag=1;for(i=1;i<=top;i++){printf("(%d,%d)",s[i].x,s[i].y);}return ;}if(x<1||x>n||y<1||y>m){return ;}if(book[x][y]==1){return ;}book[x][y]=1;//将当前尝试坐标入栈 top++;s[top].x=x;s[top].y=y;if(a[x][y]>=5&&a[x][y]<=6)//当前水管是直管的情况{if(front==1){dfs(x,y+1,1);}if(front==2){dfs(x+1,y,2);}if(front==3){dfs(x,y-1,3);}if(front==4){dfs(x-1,y,4);}}if(a[x][y]>=1&&a[x][y]<=4)//当前水管是弯管的情况{if(front==1){dfs(x+1,y,2);dfs(x-1,y,4);}if(front==2){dfs(x,y+1,1);dfs(x,y-1,3);}if(front==3){dfs(x-1,y,4);dfs(x+1,y,2);}if(front==4){dfs(x,y+1,1);dfs(x,y-1,3);}}// book[x][y]=0; // 本语句可将标记数组复原,本题中可有可无 top--; //将当前尝试坐标出栈 return ; }

如果觉得《水管工游戏 (深搜)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
算法-水管工游戏

算法-水管工游戏

2020-09-07

水管工游戏——dfs

水管工游戏——dfs

2019-07-31

深度搜索--水管工游戏

深度搜索--水管工游戏

2021-12-29

4.6水管工游戏

4.6水管工游戏

2023-07-05