Problem | Result | Memory | Time | Language | Code Length |
1573 | Accepted | 136K | 0MS | C++ | 1171B |
#define MAXSIDE 10
#define bool int
int row,col,start;
char grid[MAXSIDE+2][MAXSIDE+2];
int road[MAXSIDE+2][MAXSIDE+2];
void Go(int now_r, int now_c) {
if(now_r<1 || now_c<1 || now_r>row || now_c>col) {
printf("%d step(s) to exit/n", road[now_r][now_c]-1);
return;
}
int next_r, next_c;
switch(grid[now_r][now_c]) {
case 'N':
next_r = now_r - 1;
next_c = now_c;
break;
case 'S':
next_r = now_r + 1;
next_c = now_c;
break;
case 'E':
next_r = now_r;
next_c = now_c + 1;
break;
case 'W':
next_r = now_r;
next_c = now_c - 1;
break;
default:
break;
}
if(road[next_r][next_c]) {
printf("%d step(s) before a loop of %d step(s)/n", road[next_r][next_c]-1, road[now_r][now_c]-road[next_r][next_c]+1);
return;
}
road[next_r][next_c] = road[now_r][now_c] + 1;
Go(next_r, next_c);
}
int main() {
while(scanf("%d%d%d", &row, &col, &start)&&row||col||start) {
int i=1;
for(; i<=row; i++) {
scanf("%s", &grid[i][1]);
}
memset(road, 0, sizeof(road));
road[1][start] = 1;
Go(1, start);
}
return 0;
}