数据结构走迷宫c语言
时间: 2023-11-20 22:05:48 浏览: 116
以下是使用C语言实现走迷宫的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 10
#define COL 10
int maze[ROW][COL] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 0, 1, 1, 1, 0, 1, 0},
{0, 1, 1, 0, 1, 1, 1, 0, 1, 0},
{0, 1, 1, 1, 1, 0, 0, 1, 1, 0},
{0, 1, 0, 0, 0, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 0, 1, 1, 1, 1, 0},
{0, 1, 0, 1, 1, 1, 0, 1, 1, 0},
{0, 1, 0, 0, 0, 1, 0, 0, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
int visited[ROW][COL] = {0}; // 标记是否访问过
typedef struct {
int x;
int y;
} Pos;
Pos path[ROW * COL]; // 保存路径
int top = -1; // 栈顶指针
void push(Pos p) {
path[++top] = p;
}
Pos pop() {
return path[top--];
}
Pos get_top() {
return path[top];
}
int is_empty() {
return top == -1;
}
void print_path() {
int i;
for (i = 0; i <= top; i++) {
printf("(%d, %d) ", path[i].x, path[i].y);
}
printf("\n");
}
void dfs(Pos start, Pos end) {
push(start);
visited[start.x][start.y] = 1;
while (!is_empty()) {
Pos cur = get_top();
if (cur.x == end.x && cur.y == end.y) {
print_path();
return;
}
int i;
for (i = 0; i < 4; i++) {
Pos next;
switch (i) {
case 0: // 上
next.x = cur.x - 1;
next.y = cur.y;
break;
case 1: // 下
next.x = cur.x + 1;
next.y = cur.y;
break;
case 2: // 左
next.x = cur.x;
next.y = cur.y - 1;
break;
case 3: // 右
next.x = cur.x;
next.y = cur.y + 1;
break;
}
if (maze[next.x][next.y] == 1 && visited[next.x][next.y] == 0) {
push(next);
visited[next.x][next.y] = 1;
break;
}
}
if (i == 4) { // 四个方向都走不通,回溯
visited[cur.x][cur.y] = 0;
pop();
}
}
printf("No path found.\n");
}
int main() {
Pos start = {1, 1};
Pos end = {8, 8};
dfs(start, end);
return 0;
}
```
该示例代码使用深度优先搜索算法实现了走迷宫的功能。其中,使用栈来保存路径,使用visited数组来标记是否访问过某个位置。具体实现过程可以参考代码注释。
阅读全文