c语言用栈实现迷宫源代码
时间: 2024-10-09 07:02:15 浏览: 33
在C语言中,用栈来实现迷宫算法通常涉及到深度优先搜索(DFS)。以下是一个简单的迷宫遍历的栈实现思路示例,这里假设我们有一个二维字符数组表示迷宫,'.'代表空地,'#'代表墙壁,S是起点,E是终点:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 5 // 迷宫大小,这里仅为例子
#define COL 5
typedef struct {
int x;
int y;
} Node;
Node maze[ROW][COL] = { /* 迷宫地图填充部分 */ };
// 判断当前位置是否为空地
int is_valid(int x, int y) {
return maze[x][y] == '.';
}
// 初始化栈
void init_stack(Node stack[]) {
stack[0].x = 0; // 起点坐标
stack[0].y = 0;
stack[0].visited = 1; // 标记已访问
stack[1].x = -1;
stack[1].y = -1;
stack[1].visited = 0;
}
// 检查栈顶是否为终点
int is_end(Node top) {
return top.x == ROW - 1 && top.y == COL - 1;
}
// 栈操作
void push(Node* stack, Node node) {
stack[1].x = node.x;
stack[1].y = node.y;
stack[1].visited = node.visited;
stack++;
}
void pop(Node* stack) {
stack--;
}
// DFS遍历迷宫
void dfs(Node* stack) {
while (stack->visited) {
if (is_end(stack->x, stack->y)) {
printf("Path found: (%d,%d)\n", stack->x, stack->y);
break;
}
int dx[] = {-1, 0, 1, 0}; // 可选的四个方向
int dy[] = {0, 1, 0, -1};
for (int i = 0; i < 4; ++i) {
int nx = stack->x + dx[i];
int ny = stack->y + dy[i];
if (is_valid(nx, ny) && !maze[nx][ny].visited) {
maze[nx][ny].visited = 1; // 标记路径
stack->x = nx;
stack->y = ny;
push(stack, maze[nx][ny]);
}
}
pop(stack); // 回溯一步
}
}
int main() {
init_stack(maze[0]); // 初始化栈
dfs(&maze[0]); // 开始搜索
return 0;
}
```
阅读全文