用c语言输出迷宫的一个解
时间: 2024-03-04 11:49:37 浏览: 233
好的,以下是一个简单的迷宫求解程序,使用了C语言:
```
#include <stdio.h>
#include <stdlib.h>
#define ROW 10
#define COL 10
int maze[ROW][COL] = {
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,1,1,1,0,1,1,0},
{0,1,0,0,0,1,0,0,1,0},
{0,1,1,1,0,1,1,1,1,0},
{0,1,0,0,0,0,0,0,0,0},
{0,1,0,1,1,0,1,1,1,0},
{0,1,0,0,1,0,0,0,1,0},
{0,1,1,0,1,1,1,0,1,0},
{0,0,1,0,0,0,0,0,1,0},
{0,0,1,1,1,1,1,1,1,0},
};
int visited[ROW][COL];
void printMaze() {
for(int i=0; i<ROW; i++) {
for(int j=0; j<COL; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
}
int dfs(int x, int y) {
if(x == ROW-1 && y == COL-1) {
return 1;
}
visited[x][y] = 1;
if(x-1 >= 0 && !visited[x-1][y] && maze[x-1][y] == 0) {
if(dfs(x-1, y)) {
return 1;
}
}
if(x+1 < ROW && !visited[x+1][y] && maze[x+1][y] == 0) {
if(dfs(x+1, y)) {
return 1;
}
}
if(y-1 >= 0 && !visited[x][y-1] && maze[x][y-1] == 0) {
if(dfs(x, y-1)) {
return 1;
}
}
if(y+1 < COL && !visited[x][y+1] && maze[x][y+1] == 0) {
if(dfs(x, y+1)) {
return 1;
}
}
return 0;
}
int main() {
printMaze();
printf("\n");
if(dfs(0, 0)) {
printf("迷宫有解!\n");
}
else {
printf("迷宫无解!\n");
}
return 0;
}
```
这个程序使用了深度优先搜索(DFS)算法来求解迷宫问题。先定义了一个迷宫maze和一个visited数组,其中maze存储了迷宫的地图,visited用于记录每个位置是否已经被访问过。
在dfs函数中,首先判断当前位置是否为终点,如果是则返回1表示找到了一条通路。然后将当前位置标记为已访问,并依次判断上、下、左、右四个方向上是否有可行的路径。如果有,则递归调用dfs函数,如果找到了一条通路,则返回1,否则继续查找。如果四个方向都没有通路,则返回0表示该位置无法到达终点。
在main函数中,首先打印出迷宫地图,然后调用dfs函数查找是否有通路。如果有,则输出“迷宫有解!”;否则输出“迷宫无解!”。
阅读全文