模拟题目,没什么难度。
//MDK 1573 Accepted 216K 0MS C++ 2460B 2011-11-08 19:31:29
int n,m,ini;
char mat[MAXN][MAXN];
int vis[MAXN][MAXN];
int go[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int getgo(char c) {
if(c == 'N') return 0;
if(c == 'S') return 1;
if(c == 'W') return 2;
if(c == 'E') return 3;
}
int main() {
FOPEN
while(~SCFT(n,m,ini)) {
if(!(n||m||ini)) break;
F(i,n) SCFS(mat[i+1]+1);
//PP(n+1,m+1,mat);
SET(vis,0);
F(i,n+2) vis[i][0] = -1,vis[i][m+1] = -1;
F(i,m+2) vis[0][i] = -1,vis[n+1][i] = -1;
//PP(n+2,m+2,vis);
int flag = 0,step = 1,ans,rep;
int now[2] = {1,ini};
vis[now[0]][now[1]] = 1;
while(flag == 0) {
//PP(n+2,m+2,vis);
step ++;
int fo = getgo(mat[now[0]][now[1]]);
//DB(fo);
now[0] += go[fo][0];
now[1] += go[fo][1];
if(vis[now[0]][now[1]] != 0) {
if(vis[now[0]][now[1]] == -1) {
flag = 1;
ans = step;
} else {
flag = 2;
ans = vis[now[0]][now[1]];
rep = step - vis[now[0]][now[1]];
}
break;
}
vis[now[0]][now[1]] = step;
}
ans --;
if(flag == 1) {
printf("%d step(s) to exit\n",ans);
} else {
printf("%d step(s) before a loop of %d step(s)\n",ans,rep);
}
}
}
浙公网安备 33010602011771号