#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 19:07:42 浏览: 28
这个代码是一个求解迷宫路径的程序,使用了深度优先搜索的算法。我稍微修改了一下,加了一些注释和一些容错处理,代码如下:
```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) {
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 (fgets(maze[n], MAXN, stdin) && maze[n][0] != '\n') {
n++;
}
m = strlen(maze[0]) - 1; // 减去换行符
// 求解迷宫
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。