用c语言写:以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。 基本要求: (1) 实现一个以链表做存储的栈类型, 然后编写一个求解迷宫的非递归程序。 求的通路以三元组(i, j, d) 的形式输出, 其中:(i, j) 指示迷宫中的一个坐标, d 表示走到下一坐标的方向。 如: 对于下列数据的迷宫, 输出一条通路: (1, 1, 1),(1, 2, 2), (2, 2, 2),(3, 2, 3),(3, 1, 2) ……。 (2) 编写递归形式的算法, 求得迷宫中所有可能的道路; 扩展功能要求: 以方阵形式输出迷宫及其到道路 测试数据: 迷宫的测试数据如下: 左上角(1, 1) 为入口, 右下角(8, 9) 为出口。
时间: 2023-10-06 21:09:10 浏览: 107
这是一道比较典型的迷宫求解问题,可以使用深度优先搜索或广度优先搜索算法来解决。
以下是一个基于深度优先搜索的非递归程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 1000
// 迷宫大小
#define ROWS 8
#define COLS 9
// 迷宫数据
int maze[ROWS][COLS] = {
{1,0,0,0,0,0,0,0,0},
{1,1,1,1,0,1,1,1,0},
{0,1,0,1,0,1,0,1,0},
{0,1,0,1,1,1,0,1,0},
{0,1,0,0,0,0,0,1,0},
{0,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0}
};
// 标记数组,用于记录当前位置是否已经访问过
int visited[ROWS][COLS] = {0};
// 定义栈结构体
typedef struct {
int row;
int col;
int dir;
} StackElem;
typedef struct {
StackElem data[MAX_STACK_SIZE];
int top;
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
// 入栈
void push(Stack *s, StackElem e) {
if (isFull(s)) {
printf("Stack overflow!\n");
exit(1);
}
s->data[++(s->top)] = e;
}
//