C语言邻接矩阵解决迷宫问题
时间: 2024-05-10 19:10:44 浏览: 108
C语言邻接矩阵可以用来解决迷宫问题。迷宫问题可以看作是一个图的问题,其中迷宫的每个格子可以看作是图的一个顶点,而相邻的格子之间的通路可以看作是图的一条边。邻接矩阵可以用来表示图的连接关系。
下面是一个使用邻接矩阵解决迷宫问题的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 10
int maze[MAX_SIZE][MAX_SIZE]; // 迷宫矩阵
int visited[MAX_SIZE][MAX_SIZE]; // 记录是否访问过
int n, m; // 迷宫的行数和列数
// 深度优先搜索函数
void dfs(int x, int y) {
// 如果到达终点,则输出路径
if (x == n - 1 && y == m - 1) {
printf("(%d, %d) ", x, y);
return;
}
// 标记当前位置已访问
visited[x][y] = 1;
// 向上走
if (x > 0 && maze[x - 1][y] == 0 && visited[x - 1][y] == 0) {
printf("(%d, %d) ", x, y);
dfs(x - 1, y);
}
// 向下走
if (x < n - 1 && maze[x + 1][y] == 0 && visited[x + 1][y] == 0) {
printf("(%d, %d) ", x, y);
dfs(x + 1, y);
}
// 向左走
if (y > 0 && maze[x][y - 1] == 0 && visited[x][y - 1] == 0) {
printf("(%d, %d) ", x, y);
dfs(x, y - 1);
}
// 向右走
if (y < m - 1 && maze[x][y + 1] == 0 && visited[x][y + 1] == 0) {
printf("(%d, %d) ", x, y);
dfs(x, y + 1);
}
// 回溯,取消标记
visited[x][y] = 0;
}
int main() {
printf("请输入迷宫的行数和列数:");
scanf("%d %d", &n, &m);
printf("请输入迷宫的矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &maze[i][j]);
}
}
printf("迷宫的路径为:");
dfs(0, 0);
return 0;
}
```
这段代码使用深度优先搜索算法来解决迷宫问题。首先,用户需要输入迷宫的行数和列数,然后输入迷宫的矩阵。迷宫的矩阵中,0表示通路,1表示墙壁。程序会从起点(0, 0)开始进行深度优先搜索,直到找到终点(n-1, m-1)为止。在搜索过程中,会输出经过的路径。
阅读全文