模拟题
AC代码:
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<math.h> 7 #include<algorithm> 8 #include<queue> 9 #include<set> 10 #include<bitset> 11 #include<map> 12 #include<vector> 13 #include<stdlib.h> 14 using namespace std; 15 #define ll long long 16 #define eps 1e-10 17 #define MOD 1000000007 18 #define N 16 19 #define inf 1e12 20 int n,m,st; 21 char mp[N][N]; 22 int vis[N][N]; 23 bool judge(int i,int j){ 24 if(i<0 || i>=n || j<0 || j>=m) return true; 25 return false; 26 } 27 int main() 28 { 29 while(scanf("%d%d",&n,&m)==2){ 30 if(n==0 && m==0) break; 31 memset(vis,0,sizeof(vis)); 32 memset(mp,‘\0‘,sizeof(mp)); 33 scanf("%d",&st); 34 st--; 35 for(int i=0;i<n;i++){ 36 scanf("%s",mp[i]); 37 } 38 /*for(int i=0;i<n;i++){ 39 for(int j=0;j<m;j++){ 40 printf("%c",mp[i][j]); 41 } 42 } 43 */ 44 45 int i=0,j=st; 46 int ans=1; 47 int loops=-1; 48 int L; 49 //vis[i][j]=1; 50 while(1){ 51 if(mp[i][j]==‘W‘ && vis[i][j]==0){ 52 vis[i][j]=ans; 53 j--; 54 55 //printf("%d %d\n",i,j); 56 }else if(mp[i][j]==‘E‘ && vis[i][j]==0){ 57 vis[i][j]=ans; 58 j++; 59 //printf("%d %d\n",i,j); 60 61 }else if(mp[i][j]==‘N‘ && vis[i][j]==0){ 62 vis[i][j]=ans; 63 i--; 64 //printf("%d %d\n",i,j); 65 66 }else if(mp[i][j]==‘S‘ && vis[i][j]==0){ 67 vis[i][j]=ans; 68 i++; 69 //printf("%d %d\n",i,j); 70 71 } 72 else if(vis[i][j]){ 73 ans--; 74 loops = ans-vis[i][j]+1; 75 L = vis[i][j]; 76 break; 77 } 78 79 else if(judge(i,j)){ 80 //printf("%d %d\n",i,j); 81 ans--; 82 break; 83 } 84 ans++; 85 } 86 87 if(loops==-1){ 88 printf("%d step(s) to exit\n",ans); 89 }else{ 90 printf("%d step(s) before a loop of %d step(s)\n",L-1,loops); 91 } 92 93 94 } 95 return 0; 96 }
原文:http://www.cnblogs.com/UniqueColor/p/5182476.html