POJ1573 Robot Motion 模拟水题
http://poj.org/problem?id=1573
题意:给定一个初始位置,让其在迷宫里走,看是否能走出。能走出就输出所走的步数,否则输出进入循环之前的步数和循环的步数。
思路:用If模拟所走的路线,用for语句,最多走n*m步,如果走出迷宫范围就break。否则,用map数组记录所走的步数,表示是否走过。当map!=0时,就走出循环。
具体看代码。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 char a[15][15]; 7 int map[15][15]; 8 main() 9 { 10 int n,m,t,q,w,ans,e,an,i; 11 while(scanf("%d%d%d",&n,&m,&t)!=EOF&&(n!=0||m!=0||t!=0)) 12 { 13 memset(map,0,sizeof(map)); 14 for(i=0;i<n;i++) 15 { 16 scanf("%s",a[i]); 17 } 18 q=0;w=t-1; 19 ans=1; 20 map[0][t-1]=1; 21 e=0; 22 for(i=0;i<=n*m;i++) 23 { 24 if(a[q][w]=='N') 25 { 26 q--; 27 if(q<0||q>=n) 28 { 29 e=1; 30 break; 31 } 32 else 33 { 34 if(map[q][w]==0) 35 map[q][w]=++ans; 36 else 37 { 38 an=map[q][w]; 39 break; 40 } 41 } 42 } 43 else if(a[q][w]=='S') 44 { 45 q++; 46 if(q<0||q>=n) 47 { 48 e=1; 49 break; 50 } 51 else 52 { 53 if(map[q][w]==0) 54 map[q][w]=++ans; 55 else 56 { 57 an=map[q][w]; 58 break; 59 } 60 } 61 } 62 else if(a[q][w]=='E') 63 { 64 w++; 65 if(w<0||w>=m) 66 { 67 e=1; 68 break; 69 } 70 else 71 { 72 if(map[q][w]==0) 73 map[q][w]=++ans; 74 else 75 { 76 an=map[q][w]; 77 break; 78 } 79 } 80 } 81 else if(a[q][w]=='W') 82 { 83 w--; 84 if(w<0||w>=m) 85 { 86 e=1; 87 break; 88 } 89 else 90 { 91 if(map[q][w]==0) 92 map[q][w]=++ans; 93 else 94 { 95 an=map[q][w]; 96 break; 97 } 98 } 99 } 100 } 101 if(e==1) 102 { 103 printf("%d step(s) to exit\n",ans); 104 } 105 else 106 { 107 printf("%d step(s) before a loop of %d step(s)\n",an-1,ans-an+1); 108 } 109 } 110 }