数据结构迷宫问题c语言
时间: 2023-07-25 21:14:45 浏览: 55
好的,迷宫问题可以使用深度优先搜索(DFS)算法进行解决,以下是一个使用C语言实现的迷宫问题解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 5
#define COL 5
// 定义迷宫地图:0表示可以通行,1表示障碍物
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}
};
// 定义方向数组
int dir[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
// 定义位置结构体
typedef struct {
int row;
int col;
} Position;
// 定义栈结构体
typedef struct {
Position pos[ROW * COL];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 入栈
void push(Stack *s, Position p) {
s->top++;
s->pos[s->top] = p;
}
// 出栈
void pop(Stack *s) {
s->top--;
}
// 获取栈顶元素
Position top(Stack *s) {
return s->pos[s->top];
}
// 判断位置是否合法
int isValidPos(int row, int col) {
if (row < 0 || row >= ROW || col < 0 || col >= COL) {
return 0;
}
if (maze[row][col] == 1) {
return 0;
}
return 1;
}
// 深度优先搜索算法
void DFS() {
Stack s;
initStack(&s);
Position startPos = {0, 0};
push(&s, startPos);
maze[startPos.row][startPos.col] = 1; // 标记为已访问
while (!isEmpty(&s)) {
Position curPos = top(&s);
if (curPos.row == ROW - 1 && curPos.col == COL - 1) {
printf("已找到出口!\n");
return;
}
int i;
for (i = 0; i < 4; i++) {
Position newPos = {curPos.row + dir[i][0], curPos.col + dir[i][1]};
if (isValidPos(newPos.row, newPos.col)) {
push(&s, newPos);
maze[newPos.row][newPos.col] = 1; // 标记为已访问
break;
}
}
if (i == 4) {
pop(&s);
}
}
printf("未找到出口!\n");
}
int main() {
DFS();
return 0;
}
```
以上代码中,使用了一个栈结构体来模拟深度优先搜索算法的递归过程,每次将符合条件的邻居位置入栈,直到找到出口或者栈为空。其中isValidPos函数用于判断位置是否合法,dir数组用于定义四个方向,maze数组用于存储迷宫地图,0表示可以通行,1表示障碍物。