利用栈实现迷宫求解的C语言代码
时间: 2024-12-12 13:21:50 浏览: 48
利用栈(Stack)解决迷宫问题通常采用深度优先搜索(Depth First Search,DFS)算法,这种情况下栈用于存储当前路径和下一个可以探索的位置。以下是简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int x, y; // 位置坐标
char visited; // 是否访问过标记
} Node;
// 初始化迷宫数组
void initMaze(int maze[ROW][COL], int start[2]) {
// ... 填充迷宫结构,设置起点等...
}
// 检查当前位置是否合法并标记为已访问
int isValid(int maze[ROW][COL], int x, int y) {
return x >= 0 && x < ROW && y >= 0 && y < COL && maze[x][y] == 1;
}
// 栈操作函数,压入、弹出节点
void push(Node* stack, Node node) {
stack->next = *stack; // 更新堆顶指针
*stack++ = node; // 压栈
}
Node pop(Node* stack) {
if (*stack != NULL) {
Node temp = *stack;
*stack = (*stack)->next;
return temp;
}
return NULL; // 空栈处理
}
// 迷宫求解主函数
void mazeSolver(int maze[ROW][COL], int start[2], int end[2]) {
Node* stack = (Node*)malloc(sizeof(Node));
stack->x = start[0];
stack->y = start[1];
stack->visited = 1;
stack->next = NULL;
while (stack != NULL) {
Node current = pop(stack);
// 如果到达终点
if (current.x == end[0] && current.y == end[1]) {
printf("找到了一条从起点到终点的路径!\n");
break;
}
// 探索四个相邻未访问的点
for (int dx = [-1, 0, 1, 0]; dx[0] != 0 || dx[1] != 0; ++dx) {
int nx = current.x + dx[0];
int ny = current.y + dx[1];
if (isValid(maze, nx, ny) && !maze[nx][ny]) {
maze[nx][ny] = 1; // 标记为已访问
push(stack, (Node){nx, ny});
}
}
}
free(stack); // 释放内存
}
int main() {
int maze[ROW][COL];
int start[2] = {START_X, START_Y};
int end[2] = {END_X, END_Y};
initMaze(maze, start);
mazeSolver(maze, start, end);
return 0;
}
```
阅读全文
相关推荐












