数据结构迷宫求解代码用战
时间: 2023-12-22 22:27:40 浏览: 93
根据提供的两个引用,可以得出求解迷宫问题的一般思路是使用栈来储存当前位置,从入口处开始,顺某一方向向前探索,若能走通,则继续往前走,否则原路返回,换一个方向继续探索,直到所有的通路都探索完为止。下面是一个C语言的迷宫求解代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 5
#define COL 5
int maze[ROW][COL] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 0}
};
typedef struct {
int x;
int y;
} Pos;
Pos stack[ROW * COL];
int top = -1;
void push(Pos p) {
stack[++top] = p;
}
Pos pop() {
return stack[top--];
}
Pos getTop() {
return stack[top];
}
int isEmpty() {
return top == -1;
}
void printPath() {
int i;
for (i = 0; i <= top; i++) {
printf("(%d, %d) ", stack[i].x, stack[i].y);
}
printf("\n");
}
void mazePath(int x, int y) {
Pos cur;
cur.x = x;
cur.y = y;
push(cur);
maze[x][y] = 1;
if (x == ROW - 1 && y == COL - 1) {
printPath();
return;
}
if (y + 1 < COL && maze[x][y + 1] == 0) {
mazePath(x, y + 1);
}
if (x + 1 < ROW && maze[x + 1][y] == 0) {
mazePath(x + 1, y);
}
if (y - 1 >= 0 && maze[x][y - 1] == 0) {
mazePath(x, y - 1);
}
if (x - 1 >= 0 && maze[x - 1][y] == 0) {
mazePath(x - 1, y);
}
maze[x][y] = 0;
pop();
}
int main() {
mazePath(0, 0);
return 0;
}
```
该代码使用了一个栈来储存当前位置,使用递归的方式进行迷宫的穷举求解。在代码中,maze数组表示迷宫的地图,0表示可以通过,1表示不可通过。push()函数将当前位置压入栈中,pop()函数将栈顶元素弹出,getTop()函数返回栈顶元素,isEmpty()函数判断栈是否为空。printPath()函数用于输出路径。
阅读全文