C语言 迷宫只有两个门,一个门叫入口,另一个门叫出口。一个骑士骑马从入口走进迷宫,迷宫中设置很多墙壁,对前进方向形成了多处障碍。骑士需要在迷宫中寻找通路以到达出口。设计程序,编写代码,根据用户需求行数和列数以及障碍数,创建随机迷宫,设置随机个障碍,并输出从入口到出口之间的所有路径。
时间: 2023-03-23 17:01:13 浏览: 109
两个数相加c语言
这里给出一个基于深度优先搜索(DFS)算法的C语言实现,可以生成随机迷宫并输出所有从入口到出口的路径。在本实现中,使用二维数组来表示迷宫,用0表示可通行的空地,用1表示墙壁,用2表示入口,用3表示出口,用4表示障碍物。
下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_ROW 20
#define MAX_COL 20
#define MAX_OBSTACLE_NUM 50
#define WALL 1
#define PATH 0
#define START 2
#define END 3
#define OBSTACLE 4
int maze[MAX_ROW][MAX_COL]; // 迷宫地图
int row, col; // 迷宫的行数和列数
int start_row, start_col; // 入口位置
int end_row, end_col; // 出口位置
int obstacle_num; // 障碍数量
int obstacle_row[MAX_OBSTACLE_NUM]; // 障碍位置行坐标
int obstacle_col[MAX_OBSTACLE_NUM]; // 障碍位置列坐标
void initMaze() {
// 初始化迷宫地图,全部设置为墙
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
maze[i][j] = WALL;
}
}
}
void createMaze() {
// 随机设置障碍物
int i, j, k;
for (k = 0; k < obstacle_num; k++) {
i = rand() % row;
j = rand() % col;
if (maze[i][j] == PATH) {
maze[i][j] = OBSTACLE;
obstacle_row[k] = i;
obstacle_col[k] = j;
}
else {
k--;
}
}
// 设置入口和出口
do {
start_row = rand() % row;
start_col = rand() % col;
} while (maze[start_row][start_col] != PATH);
maze[start_row][start_col] = START;
do {
end_row = rand() % row;
end_col = rand() % col;
} while (maze[end_row][end_col] != PATH);
maze[end_row][end_col] = END;
}
void printMaze() {
// 打印迷宫地图
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
switch (maze[i][j]) {
case WALL:
printf("■ ");
break;
case PATH:
printf(" ");
break;
case START:
printf("S ");
break;
case END:
printf("E ");
break;
case OBSTACLE:
printf("× ");
break;
default:
break;
}
}
printf("\n");
}
printf("\n");
}
void dfs(int r, int c, int visited[MAX_ROW][MAX_COL], int path[MAX_ROW * MAX_COL], int depth) {
// 深度优先搜索算
阅读全文