分析:一步步的走,走出矩阵则说明没有环,若走到已经走过的地方,说明有环,按格式输出结果,OK.
#include<iostream> using namespace std; #define N 15 int dir[4][2]={-1,0,1,0,0,-1,0,1}; char map[N][N]; int vis[N][N]; char ch[]="NSWE"; int n,m; int id(char c) { int i; for(i=0;i<4;i++) if(ch[i]==c) return i; } void sovle(int s) { int i,j,k; i=k=1; j=s; memset(vis,0,sizeof(vis)); vis[i][j]=k; while(true) { s=i; i+=dir[id(map[i][j])][0]; j+=dir[id(map[s][j])][1]; if(i<1 || i>n || j<1 ||j>m) { printf("%d step(s) to exit\n",k); break; } if(vis[i][j]) { printf("%d step(s) before a loop of %d step(s)\n",vis[i][j]-1,k-vis[i][j]+1); break; } vis[i][j]=++k; } } int main() { int s,i,j; while(cin>>n>>m,n||m) { cin>>s; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cin>>map[i][j]; getchar(); } sovle(s); } return 0; }
HDU ACM 1035 Robot Motion 简单模拟题
原文地址:http://blog.csdn.net/a809146548/article/details/46380099