1a,开心,模拟题
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<stack> #include<queue> using namespace std; int n,m,k; int Map[15][15]; int road[15][15]; int swh[4][2]={-1,0,0,1,1,0,0,-1}; void Intmap() { char ch; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%c",&ch); switch(ch) { case 'N':Map[i][j]=0;break; case 'E':Map[i][j]=1;break; case 'S':Map[i][j]=2;break; case 'W':Map[i][j]=3;break; } } getchar(); } } void printmap() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) printf("%d ",Map[i][j]); printf("\n"); } } void move() { int i=0,j=k-1,step=1; while(i>-1||i<n||j>-1||j<m) { road[i][j]=step++; int nx_i=swh[Map[i][j]][0]; int nx_j=swh[Map[i][j]][1]; if((i+nx_i>-1&&i+nx_i<n&&j+nx_j>-1&&j+nx_j<m)&&road[i+nx_i][j+nx_j]==0) { i+=nx_i; j+=nx_j; } else if(i+nx_i==-1||i+nx_i==n||j+nx_j==-1||j+nx_j==m) { printf("%d step(s) to exit\n",road[i][j]); return; } else if(road[i+nx_i][j+nx_j]!=0) { printf("%d step(s) before a loop of %d step(s)\n",road[i+nx_i][j+nx_j]-1,road[i][j]-road[i+nx_i][j+nx_j]+1); return; } } } int main() { while(~scanf("%d%d%d",&n,&m,&k)&&(n||m||k)) { memset(Map,0,sizeof(Map)); memset(road,0,sizeof(road)); getchar(); Intmap(); move(); } //printmap(); }