标签:
Description
Input
Output
Sample Input
Sample Output
#include<iostream> #include<string.h> using namespace std; char str[1000][1000]; int x[100],y[100],p,q; void f(char ch) { if(ch==‘N‘)p--; if(ch==‘S‘)p++; if(ch==‘E‘)q++; if(ch==‘W‘)q--; } int main() { int m,n,l,i,k,t; while(cin>>m>>n){ if(m==0&&n==0)break; cin>>l; x[0]=0; y[0]=l-1; memset(str,‘\0‘,sizeof(str)); for(i=0;i<m;i++){ for(int j=0;j<n;j++)cin>>str[i][j]; } k=0; while(1){ p=x[k]; q=y[k]; f(str[x[k]][y[k]]); if(p<0||p==m||q<0||q==n){ cout<<k+1<<" step(s) to exit"<<endl; break; } t=0; for(i=0;i<k;i++){ if(x[k]==x[i]&&y[k]==y[i]){ t=i; break; } } if(t!=0){ cout<<t<<" step(s) before a loop of "<<k-t<<" step(s)"<<endl; break; } k++; x[k]=p; y[k]=q; } } return 0; }
检查半天没有结果,就换一种方法来写,结果 超时
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; char str[100][100]; int x[100][100]; int main() { int m,n,l; while(scanf("%d%d",&m,&n)){ if(m==0&&n==0)break; scanf("%d",&l); memset(str,‘\0‘,sizeof(str)); memset(x,0,sizeof(x)); int p=0,q=l-1,k=0; for(int i=0;i<m;i++)scanf("%s",str[i]); while(1) { k++; if(str[p][q]==‘N‘&&!x[p][q]){ x[p][q]=k; p--; } else if(str[p][q]==‘S‘&&!x[p][q]){ x[p][q]=k; p++; } else if(str[p][q]==‘E‘&&!x[p][q]){ x[p][q]=k; q++; } else if(str[p][q]==‘W‘&&!x[p][q]){ x[p][q]=k; q--; } else if(x[p][q]){ printf("%d step(s) before a loop of %d step(s)\n",x[p][q]-1,k-x[p][q]); break; } else if(p<0||q<0||p==n||q==m){ printf("%d step(s) to exit\n",k-1); break; } } } return 0; }
最后最后的正确代码,分四个情况,每次移动后都判断是否越界,不越界就走下一步,越界就分情况输出结果
#include<stdio.h> #include<string.h> char map[100][100]; int t[100][100]; int main() { int n,m,k; int x,y; while(scanf("%d%d",&n,&m)!=EOF&&(m+n)){ scanf("%d",&k); for(int i=0;i<n;i++) scanf("%s",&map[i]); x=0; y=k-1; memset(t,0,sizeof(t)); t[x][y]=1; while(1){ if(map[x][y]==‘E‘){ y++; if(y==m){ printf("%d step(s) to exit\n",t[x][y-1]); break; } if(t[x][y]!=0){ printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-1,t[x][y-1]-t[x][y]+1); break; } t[x][y]=t[x][y-1]+1; } else if(map[x][y]==‘W‘){ y--; if(y<0){ printf("%d step(s) to exit\n",t[x][y+1]); break; } if(t[x][y]!=0){ printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-1,t[x][y+1]-t[x][y]+1); break; } t[x][y]=t[x][y+1]+1; } else if(map[x][y]==‘N‘){ x--; if(x<0) { printf("%d step(s) to exit\n",t[x+1][y]); break; } if(t[x][y]!=0){ printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-1,t[x+1][y]-t[x][y]+1); break; } t[x][y]=t[x+1][y]+1; } else{ x++; if(x==n){ printf("%d step(s) to exit\n",t[x-1][y]); break; } if(t[x][y]!=0){ printf("%d step(s) before a loop of %d step(s)\n",t[x][y]-1,t[x-1][y]-t[x][y]+1); break; } t[x][y]=t[x-1][y]+1; } } } return 0; }
题不难,注意思路!!!
标签:
原文地址:http://www.cnblogs.com/farewell-farewell/p/5199067.html