标签:dfs scan color 参数 getch main 函数 return names
#include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int map[10][10]; int a,b,c,d,flag,i,j; int n,m,t,count; int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}}; ///分别表示左、右、下、上四个方向 void DFS(int x,int y,int count) { int k,p,q; if(x>n||y>m||x<1||y<1) { return ; } if(count==t&&x==c&&y==d)///时间正好才能逃生 { flag=1; return ; } k=(t-count)-(abs(x-c)+abs(y-d))/*当前点到终点的最短路*/;///k为当前点到终点最短路还需要的时间差 if(k<0||k&1)///k<0或者为奇数则不可能到达 { return ; } for(i=0;i<4;i++) { p=x+dir[i][0]; q=y+dir[i][1]; if(map[p][q]!=‘X‘) { map[p][q]=‘X‘; count++; DFS(p,q,count); if(flag) { return ; } map[p][q]=‘.‘;///搜索不到则退出,重新将该点刷成。 } } return ; } int main() { int w;///墙的数量 while(scanf("%d%d%d",&n,&m,&t)!=EOF) { w=0; if(n==0||m==0||t==0) { break; } getchar(); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%c",&map[i][j]); if(map[i][j]==‘S‘)///记录狗的位置 { a=i; b=j; } else if(map[i][j]==‘D‘)///出口的位置 { c=i; d=j; } else if(map[i][j]==‘X‘)///墙的数量 { w++; } } getchar(); } if(n*m-w<=t)///路径剪切,走完了不含墙的迷宫都还不到时间t,迷宫塌陷 { printf("NO\n"); continue; } flag=0; map[a][b]=‘X‘;///将狗的起始位置刷为x DFS(a,b,0);///这里的DFS函数是一个需要自身调用自身的递归函数,需要设置参数 if(flag) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
标签:dfs scan color 参数 getch main 函数 return names
原文地址:https://www.cnblogs.com/wkfvawl/p/9326177.html