#include <stdio.h> #include <string.h> #define MAXN 100 int n, m; char maze[MAXN][MAXN]; char path[MAXN * MAXN]; int vis[MAXN][MAXN]; int go(int x, int y, int p) { if (x < 0 || x >= n || y < 0 || y >= m) return 0; // 越界 if (maze[x][y] == '1') return 0; // 遇到围墙 if (vis[x][y]) return 0; // 已经走过 if (x == n - 1 && y == m - 1) { // 到达终点 path[p] = '\0'; // 字符串结尾 return 1; } vis[x][y] = 1; // 标记已经走过 path[p] = 'D'; // 向下走 if (go(x + 1, y, p + 1)) return 1; // 向下走 path[p] = 'R'; // 向右走 if (go(x, y + 1, p + 1)) return 1; // 向右走 path[p] = 'U'; // 向上走 if (go(x - 1, y, p + 1)) return 1; // 向上走 path[p] = 'L'; // 向左走 if (go(x, y - 1, p + 1)) return 1; // 向左走 vis[x][y] = 0; // 恢复现场 return 0; } int main() { while (scanf("%s", maze[n]) == 1 && maze[n][0] != '\0') { n++; } m = strlen(maze[0]); if (go(0, 0, 0)) { printf("%s\n", path); } else { printf("NO PASS!\n"); } return 0; }大范围修改一下这个代码写一个完整的代码
时间: 2023-11-23 12:07:42 浏览: 23
以下是我修改过的代码,加上了一些注释和容错处理:
```c
#include <stdio.h>
#include <string.h>
#define MAXN 100
int n, m;
char maze[MAXN][MAXN];
char path[MAXN * MAXN];
int vis[MAXN][MAXN];
int go(int x, int y, int p) {
// 越界或遇到围墙或已经走过,返回 0
if (x < 0 || x >= n || y < 0 || y >= m || maze[x][y] == '1' || vis[x][y]) {
return 0;
}
// 到达终点,返回 1
if (x == n - 1 && y == m - 1) {
path[p] = '\0'; // 字符串结尾
return 1;
}
vis[x][y] = 1; // 标记已经走过
// 按照“下右上左”的顺序进行搜索
if (go(x + 1, y, p + 1)) { // 向下走
path[p] = 'D';
return 1;
}
if (go(x, y + 1, p + 1)) { // 向右走
path[p] = 'R';
return 1;
}
if (go(x - 1, y, p + 1)) { // 向上走
path[p] = 'U';
return 1;
}
if (go(x, y - 1, p + 1)) { // 向左走
path[p] = 'L';
return 1;
}
vis[x][y] = 0; // 恢复现场
return 0;
}
int main() {
// 读入迷宫
while (fgets(maze[n], MAXN, stdin) && maze[n][0] != '\n') {
n++;
}
m = strlen(maze[0]);
// 去掉字符串末尾的换行符
if (maze[n-1][m-1] == '\n') {
maze[n-1][m-1] = '\0';
m--;
}
// 求解迷宫
if (go(0, 0, 0)) {
printf("%s\n", path);
} else {
printf("NO PASS!\n");
}
return 0;
}
```
这个代码读入一个迷宫,然后求解从起点到终点的路径。其中,迷宫用字符数组 `maze` 存储,起点是 `(0, 0)`,终点是 `(n-1, m-1)`,路径用字符数组 `path` 存储,访问标记用二维数组 `vis` 存储。在求解路径的过程中,我们按照“下右上左”的顺序进行搜索,如果搜索到了终点就返回 1,否则返回 0。在搜索的过程中,如果发现当前位置越界、遇到围墙或者已经走过,就返回 0;如果找到了终点,就将路径存储在字符数组 `path` 中并返回 1。