C语言中用深度优先实现自动走迷宫
时间: 2023-10-30 19:08:14 浏览: 103
迷宫问题c语言 深度优先搜索
5星 · 资源好评率100%
好的,很高兴回答你的问题。
在C语言中,实现深度优先搜索算法来解决迷宫问题,可以按照以下步骤进行:
1. 定义一个二维数组来表示迷宫,0表示通路,1表示障碍物或墙壁。
2. 定义一个栈,用来存储走过的路径。
3. 定义一个结构体来表示一个点的坐标。
```c
typedef struct {
int x;
int y;
} Point;
```
4. 定义一个函数,将起点入栈,并将其标记为已访问。
```c
void dfs(int maze[][MAX_SIZE], int visit[][MAX_SIZE], Point start, Point end, Stack *stack) {
push(stack, start);
visit[start.x][start.y] = 1;
}
```
5. 定义一个函数,判断当前点是否为终点,如果是,则输出路径并退出程序。
```c
void dfs(int maze[][MAX_SIZE], int visit[][MAX_SIZE], Point start, Point end, Stack *stack) {
...
if (start.x == end.x && start.y == end.y) {
printPath(stack);
exit(0);
}
...
}
```
6. 定义一个函数,遍历当前点的上下左右四个方向,如果该方向为通路且未被访问过,则将该点入栈,并将其标记为已访问。
```c
void dfs(int maze[][MAX_SIZE], int visit[][MAX_SIZE], Point start, Point end, Stack *stack) {
...
// 上
if (start.x > 0 && maze[start.x - 1][start.y] == 0 && visit[start.x - 1][start.y] == 0) {
Point next = {start.x - 1, start.y};
push(stack, next);
visit[next.x][next.y] = 1;
dfs(maze, visit, next, end, stack);
pop(stack);
}
// 下
if (start.x < MAX_SIZE - 1 && maze[start.x + 1][start.y] == 0 && visit[start.x + 1][start.y] == 0) {
Point next = {start.x + 1, start.y};
push(stack, next);
visit[next.x][next.y] = 1;
dfs(maze, visit, next, end, stack);
pop(stack);
}
// 左
if (start.y > 0 && maze[start.x][start.y - 1] == 0 && visit[start.x][start.y - 1] == 0) {
Point next = {start.x, start.y - 1};
push(stack, next);
visit[next.x][next.y] = 1;
dfs(maze, visit, next, end, stack);
pop(stack);
}
// 右
if (start.y < MAX_SIZE - 1 && maze[start.x][start.y + 1] == 0 && visit[start.x][start.y + 1] == 0) {
Point next = {start.x, start.y + 1};
push(stack, next);
visit[next.x][next.y] = 1;
dfs(maze, visit, next, end, stack);
pop(stack);
}
...
}
```
7. 在主函数中调用dfs函数,并传入起点、终点、迷宫数组和访问数组。
```c
int main() {
int maze[MAX_SIZE][MAX_SIZE] = {...};
int visit[MAX_SIZE][MAX_SIZE] = {0};
Point start = {0, 0};
Point end = {MAX_SIZE - 1, MAX_SIZE - 1};
Stack *stack = createStack();
dfs(maze, visit, start, end, stack);
return 0;
}
```
以上就是用深度优先搜索算法实现自动走迷宫的C语言代码。希望能对你有所帮助。
阅读全文