1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| #include<stdio.h>
char map[120][120];
int cnt[120][120];
int n,m,resx,resy;
bool win=false;
int move(int x,int y,int mcnt) {
// printf("%d-%d-%c\n",x,y,map[x][y]);
if(x<0||x==n||y<0||y==m) {
win=true;
return mcnt-1;
}
if(cnt[x][y]) {
win=false;
resx=x;
resy=y;
return mcnt-1;
}
cnt[x][y]=mcnt;
if(map[x][y]=='N')
return move(x-1,y,mcnt+1);
else if(map[x][y]=='S')
return move(x+1,y,mcnt+1);
else if(map[x][y]=='W')
return move(x,y-1,mcnt+1);
else if(map[x][y]=='E')
return move(x,y+1,mcnt+1);
}
int main() {
int k;
while(scanf("%d %d %d",&n,&m,&k),n||m||k) {
getchar();
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cnt[i][j]=0;
scanf("%c",&map[i][j]);
}
getchar();
}
int res=move(0,k-1,1);
if(win)
printf("%d step(s) to exit\n",res);
else
printf("%d step(s) before a loop of %d step(s)\n",cnt[resx][resy]-1,res-cnt[resx][resy]+1);
}
return 0;
}
|