只要根据格子的方向选择下一步搜索的方向即可,退出条件是出界或者进入环中,进入环中的条件也很好确定,就是一个点走了两次,由于路径是固定的,这就会陷入无限循环。
#include<iostream> #include<cstdio> #include<cstring> #define maxn 1005 using namespace std; int n,m,c; int k; int step[maxn][maxn]; char map[maxn][maxn]; void dfs(int x,int y) { if(x<0||x>=n||y<0||y>=m) { printf("%d step(s) to exit\n",k); return; } if(step[x][y]) { printf("%d step(s) before a loop of %d step(s)\n",step[x][y]-1,k-step[x][y]+1); return; } if(map[x][y]==‘N‘) { step[x][y]=++k; dfs(x-1,y); } if(map[x][y]==‘S‘) { step[x][y]=++k; dfs(x+1,y); } if(map[x][y]==‘E‘) { step[x][y]=++k; dfs(x,y+1); } if(map[x][y]==‘W‘) { step[x][y]=++k; dfs(x,y-1); } return; } int main() { while(cin>>n>>m>>c&&(m+n)) { for(int i=0;i<n;i++)scanf("%s",&map[i]); memset(step,0,sizeof(step)); k=0; dfs(0,c-1); } }
hdu1035 机器人走格子,格子指明方向,问几步走出格子或者是否有形成圈
原文:https://www.cnblogs.com/randy-lo/p/12384652.html