很簡單的一道題,一步步的走,走出矩陣則說明沒有環,若走到已經走過的地方,說明有環,按格式輸出結果即可!!!
#include<stdio.h> #include<string.h> int n,m,temp; int ans[1010][1010]; char map[1010][1010]; void dfs(int sx,int sy) { while(sx>=0&&sx<n&&sy>=0&&sy<m&&map[sx][sy]!='o') { if(map[sx][sy]=='S') { // temp++; map[sx][sy]='o'; ans[sx][sy]=++temp; sx++; } else if(map[sx][sy]=='N') { //temp++; map[sx][sy]='o'; ans[sx][sy]=++temp; sx--; } else if(map[sx][sy]=='E') { //temp++; map[sx][sy]='o'; ans[sx][sy]=++temp; sy++; } else if(map[sx][sy]=='W') { //temp++; map[sx][sy]='o'; ans[sx][sy]=++temp; sy--; } } if(map[sx][sy]=='o') printf("%d step(s) before a loop of %d step(s)\n",ans[sx][sy]-1,temp-ans[sx][sy]+1); else printf("%d step(s) to exit\n",temp); } int main() { int k,i; while(scanf("%d %d %d",&n,&m,&k),n+m+k) { memset(ans,0,sizeof(ans)); for(i=0;i<n;i++) scanf("%s",map[i]); temp=0; dfs(0,k-1); } return 0; }