搜索,就这样了。第一次多输出了点东西结果WA了
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define LEN 11
int map[LEN][LEN];
int point[][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int row, col;
void find(int x, int y, int step) {
int xx, yy;
if(x <= 0 || x > row || y <= 0 || y > col) {
printf("%d step(s) to exit\n", step-1);
return;
}
else if(map[x][y] > 'Z' || map[x][y] < 'E') {
printf("%d step(s) before a loop of %d step(s)\n", map[x][y]-1, step-map[x][y]);
return;
}
switch(map[x][y]) {
case 'N':
xx = x+point[0][0];
yy = y+point[0][1];
break;
case 'S':
xx = x+point[1][0];
yy = y+point[1][1];
break;
case 'W':
xx = x+point[2][0];
yy = y+point[2][1];
break;
case 'E':
xx = x+point[3][0];
yy = y+point[3][1];
break;
default:break;
}
map[x][y] = step;
find(xx, yy, step+1);
}
int main() {
int st;
while(scanf("%d%d%d", &row, &col, &st), !(0 == row && 0 == col && 0 == st)) {
int i, j;
getchar();
for(i = 1; i <= row; i++) {
for(j = 1; j <= col; j++) {
scanf("%c", &map[i][j]);
}
getchar();
}
/*
for(i = 1; i <= row; i++) {
for(j = 1; j <= col; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
*/
find(1, st, 1);
}
return 0;
}