用C语言的dfs建立一个随机迷宫,第一行随机起点,最后一行随机终点,代码示例
时间: 2023-10-11 12:05:28 浏览: 47
下面是一个使用深度优先搜索(DFS)算法建立随机迷宫的C语言代码示例。在这个迷宫中,第一行和最后一行是固定的,第一行是起点,最后一行是终点。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10 // 迷宫行数
#define COL 10 // 迷宫列数
int maze[ROW][COL]; // 迷宫矩阵
int visited[ROW][COL]; // 记录是否已经访问
// DFS函数,用于生成迷宫
void dfs(int row, int col) {
visited[row][col] = 1; // 标记当前节点已经访问
// 随机选择一个方向
int directions[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
for (int i = 0; i < 4; i++) {
int r = rand() % 4;
int new_row = row + directions[r][0];
int new_col = col + directions[r][1];
if (new_row >= 0 && new_row < ROW && new_col >= 0 && new_col < COL && !visited[new_row][new_col]) {
maze[row + directions[r][0]][col + directions[r][1]] = 0; // 打通当前节点和选择的节点之间的墙
dfs(new_row, new_col);
}
}
}
int main() {
srand(time(NULL)); // 设置随机数种子
// 初始化迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
maze[i][j] = 1; // 初始化为墙
visited[i][j] = 0; // 初始化为未访问
}
}
// 生成迷宫
dfs(0, rand() % COL);
// 设置起点和终点
maze[0][rand() % COL] = 0;
maze[ROW-1][rand() % COL] = 0;
// 输出迷宫
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (maze[i][j] == 1) {
printf("█"); // 墙
} else {
printf(" "); // 空格
}
}
printf("\n");
}
return 0;
}
```
该程序使用DFS算法实现随机迷宫的生成。在每个节点上,随机选择一个方向,如果该方向上的节点没有被访问过,则打通当前节点和该节点之间的墙,然后继续递归访问该节点。最终得到的迷宫矩阵中,1表示墙,0表示空地。程序还随机设定了起点和终点,起点位于第一行,终点位于最后一行。