请用c语言实现迷宫问题求所有路径
时间: 2023-09-01 20:13:38 浏览: 115
好的,以下是使用 C 语言的实现代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_N 10 // 迷宫的最大行数
#define MAX_M 10 // 迷宫的最大列数
int maze[MAX_N][MAX_M]; // 迷宫
bool visited[MAX_N][MAX_M]; // 标记是否已经访问过
int paths[MAX_N * MAX_M][2]; // 存储路径,每个点的坐标为一对整数
int path_count = 0; // 路径数量
void dfs(int x, int y, int path[MAX_N * MAX_M][2], int path_len)
{
if (maze[x][y] == 3) // 如果到达终点,把路径存储下来
{
for (int i = 0; i < path_len; i++)
{
paths[path_count][0] = path[i][0];
paths[path_count][1] = path[i][1];
}
path_count++;
return;
}
visited[x][y] = true; // 标记当前位置已经访问过
// 按照顺序尝试上、下、左、右四个方向
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < MAX_N && ny >= 0 && ny < MAX_M && maze[nx][ny] != 1 && !visited[nx][ny])
{
path[path_len][0] = nx; // 把当前点存储到路径中
path[path_len][1] = ny;
dfs(nx, ny, path, path_len + 1); // 递归搜索下一个点
}
}
visited[x][y] = false; // 恢复状态,标记当前位置未访问过
}
int main()
{
int n, m; // 迷宫的行数和列数
scanf("%d%d", &n, &m);
// 读入迷宫
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &maze[i][j]);
}
}
// 从起点开始搜索
int path[MAX_N * MAX_M][2] = {{0, 0}};
dfs(0, 0, path, 1);
// 输出所有路径
for (int i = 0; i < path_count; i++)
{
printf("Path %d: ", i + 1);
for (int j = 0; j < MAX_N * MAX_M; j++)
{
if (paths[i][j] == 0 && paths[i][j + 1] == 0) // 如果到达路径末尾,退出循环
{
break;
}
printf("(%d,%d) ", paths[i][j], paths[i][j + 1]);
}
printf("\n");
}
return 0;
}
```
这段代码使用深度优先搜索(DFS)求解迷宫的所有路径,并输出结果。其中,`MAX_N` 和 `MAX_M` 分别表示迷宫的最大行数和列数,可以根据实际情况进行修改。
希望这个回答能够帮到您!
阅读全文