题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
#include<stdio.h> #include<malloc.h> int main() { int raw, col; scanf("%d%d", &raw, &col); int x = 0, y = 0; int** maze = malloc(sizeof(int*) * raw); for (int i = 0; i < raw; i++) { maze[i] = malloc(sizeof(int) * col); for (int j = 0; j < col; j++) scanf("%d", &maze[i][j]);//输入矩阵 } maze[0][0] = 2; //从上往下倒水,并标记走过的路 while (x != raw - 1 || y != col - 1) { if (x != raw - 1 && maze[x + 1][y] == 0) { maze[x + 1][y] = 2; x++; } else if (y != col - 1 && maze[x][y + 1] == 0) { maze[x][y + 1] = 2; y++; } else if (y != 0 && maze[x][y - 1] == 0) { maze[x][y - 1] = 2; y--; } else if (x != 0 && maze[x - 1][y] == 0) { maze[x - 1][y] = 2; x--; } //没路走,水开始回流,并封路。 else if (x != 0 && maze[x - 1][y] == 2) { maze[x][y] = 1; x--; } else if (y != 0 && maze[x][y - 1] == 2) { maze[x][y] = 1; y--; } else if (y != col - 1 && maze[x][y - 1] == 2) { maze[x][y] = 1; y++; } else if (x != raw - 1 && maze[x - 1][y] == 2) { maze[x][y] = 1; x++; } } x = 0, y = 0; //开始通过标记过的路再走一遍,并输出。 while (x != raw - 1 || y != col - 1) { printf("(%d,%d)\n", x, y); if (x != raw - 1 && maze[x + 1][y] == 2) { maze[x + 1][y] = 1; x++; } else if (y != col - 1 && maze[x][y + 1] == 2) { maze[x][y + 1] = 1; y++; } else if (y != 0 && maze[x][y - 1] == 2) { maze[x][y - 1] = 1; y--; } else if (x != 0 && maze[x - 1][y] == 2) { maze[x - 1][y] = 1; x--; } } printf("(%d,%d)", x, y); return 0; }