题解 | #迷宫问题#
迷宫问题
http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
#include <stdio.h> #include <string.h>
int temp[10][10]; int way[100][3]; int row = 0, line = 0; int cnt = 0;
int findway(int n, int m) { //printf("cnt:%d\n", cnt); //printf("%d,%d,%d\n\n", way[cnt][0], way[cnt][1], way[cnt][2]); if(n == row - 1 && m == line -1) { return 0; } else if(m + 1 < line && temp[n][m+1] == 0 && way[cnt][2] != 3) { cnt++; way[cnt][0] = n; way[cnt][1] = m + 1; way[cnt][2] = 1;
findway(way[cnt][0], way[cnt][1]);
}
else if(n + 1 < row && temp[n + 1][m] == 0 && way[cnt][2] != 4)
{
cnt++;
way[cnt][0] = n + 1;
way[cnt][1] = m;
way[cnt][2] = 2;
findway(way[cnt][0], way[cnt][1]);
}
else if(m - 1 >= 0 && temp[n][m - 1] == 0 && way[cnt][2] != 1)
{
cnt++;
way[cnt][0] = n;
way[cnt][1] = m - 1;
way[cnt][2] = 3;
findway(way[cnt][0], way[cnt][1]);
}
else if(n - 1 >= 0 && temp[n - 1][m] == 0 && way[cnt][2] != 2)
{
cnt++;
way[cnt][0] = n - 1;
way[cnt][1] = m;
way[cnt][2] = 4;
findway(way[cnt][0], way[cnt][1]);
}
else
{
temp[n][m] = 1;
cnt--;
findway(way[cnt][0], way[cnt][1]);
}
return 1;
}
int main(void) { int i = 0, j = 0;
while(scanf("%d %d", &row, &line) != EOF)
{
cnt = 0;
for(i = 0; i < row; i++)
{
for(j = 0; j < line; j++)
{
scanf("%d", &temp[i][j]);
}
}
findway(0,0);
for(i = 0; i < cnt + 1; i++)
{
printf("(%d,%d)\n", way[i][0], way[i][1]);
}
}
return 0;
}