4.迷宫求解 任务:输入一个任意大小的迷宫数据,用非递归的方法求出走出迷宫的路径,并将路径输出。C语言数据结构
时间: 2024-03-12 17:48:11 浏览: 87
迷宫求解输入一个任意大小的迷宫数据,求出一条走出迷宫的路径,并将路径输出。
5星 · 资源好评率100%
以下是C语言实现迷宫求解的基本步骤:
1. 定义迷宫数据结构。
```c
#define MAX_ROW 10
#define MAX_COL 10
typedef struct {
int row, col; // 迷宫中的行和列
} Position;
int maze[MAX_ROW][MAX_COL] = {
{0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 0, 1, 1, 0, 1, 1, 1, 0},
{0, 1, 0, 1, 0, 0, 0, 0, 1, 1},
{0, 1, 1, 1, 0, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 0, 1, 1, 0},
{0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 0, 1, 1, 0}
};
```
2. 定义栈数据结构。
```c
#define MAX_STACK_SIZE 100
typedef struct {
int row, col;
} Element;
Element stack[MAX_STACK_SIZE];
int top = -1;
void push(Element e) {
if (top < MAX_STACK_SIZE - 1) {
stack[++top] = e;
} else {
printf("Stack overflow!\n");
}
}
Element pop() {
if (top >= 0) {
return stack[top--];
} else {
printf("Stack underflow!\n");
Element e = {-1, -1};
return e;
}
}
int is_empty() {
return (top < 0);
}
```
3. 定义迷宫求解函数。
```c
void print_path() {
int i;
for (i = 0; i <= top; i++) {
printf("(%d, %d)\n", stack[i].row, stack[i].col);
}
}
int solve_maze() {
Position cur = {0, 0};
maze[cur.row][cur.col] = 2;
Element e = {cur.row, cur.col};
push(e);
while (!is_empty()) {
cur = stack[top];
if (cur.row == MAX_ROW - 1 && cur.col == MAX_COL - 1) {
print_path();
return 1;
}
if (cur.col + 1 < MAX_COL && maze[cur.row][cur.col + 1] == 0) { // 右
maze[cur.row][cur.col + 1] = 2;
Element e = {cur.row, cur.col + 1};
push(e);
} else if (cur.row + 1 < MAX_ROW && maze[cur.row + 1][cur.col] == 0) { // 下
maze[cur.row + 1][cur.col] = 2;
Element e = {cur.row + 1, cur.col};
push(e);
} else if (cur.col - 1 >= 0 && maze[cur.row][cur.col - 1] == 0) { // 左
maze[cur.row][cur.col - 1] = 2;
Element e = {cur.row, cur.col - 1};
push(e);
} else if (cur.row - 1 >= 0 && maze[cur.row - 1][cur.col] == 0) { // 上
maze[cur.row - 1][cur.col] = 2;
Element e = {cur.row - 1, cur.col};
push(e);
} else {
pop();
}
}
printf("No path found!\n");
return 0;
}
```
4. 调用迷宫求解函数。
```c
int main() {
solve_maze();
return 0;
}
```
以上就是C语言实现迷宫求解的基本步骤。
阅读全文