有一 8×8 的迷宫图,其中 O表示通路方块,X 表示障碍方块。假设入口位置为 (0,0),出口为右下角方块位置 (7,7)。设计一个程序求指定入口到出口的一条迷宫路径。要求8 行,每行 8个字符表示迷宫。 输入保证至少存在一条合法路径。输出8 行,每行 8 个字符,空格表示所选路径。用C语言编程
时间: 2024-02-13 15:06:49 浏览: 133
指定出口和入口的迷宫
以下是使用C语言编写的迷宫路径求解程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 8
#define COL 8
// 定义迷宫地图
char maze[ROW][COL] = {
{'O', 'X', 'O', 'O', 'O', 'O', 'O', 'O'},
{'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O'},
{'O', 'X', 'O', 'O', 'O', 'X', 'O', 'O'},
{'O', 'X', 'X', 'X', 'O', 'X', 'O', 'O'},
{'O', 'O', 'O', 'X', 'O', 'X', 'O', 'O'},
{'O', 'X', 'O', 'X', 'X', 'X', 'O', 'O'},
{'O', 'X', 'O', 'O', 'O', 'O', 'O', 'O'},
{'O', 'X', 'X', 'X', 'X', 'X', 'X', 'O'}
};
// 定义方向数组
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
// 定义结构体表示一个点
typedef struct {
int x;
int y;
} Point;
// 定义栈结构体
typedef struct {
Point data[ROW * COL];
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 == ROW * COL - 1;
}
// 元素入栈
void push(Stack *s, Point p)
{
if (isFull(s)) {
printf("Stack is full!\n");
return;
}
s->data[++s->top] = p;
}
// 元素出栈
Point pop(Stack *s)
{
if (isEmpty(s)) {
printf("Stack is empty!\n");
Point p = {-1, -1};
return p;
}
return s->data[s->top--];
}
// 获取下一个可行方向
int getNextDirection(Point cur, Point *next)
{
for (int i = 0; i < 4; i++) {
next->x = cur.x + dx[i];
next->y = cur.y + dy[i];
if (next->x >= 0 && next->x < ROW && next->y >= 0 && next->y < COL && maze[next->x][next->y] == 'O') {
return i;
}
}
return -1;
}
// 迷宫路径求解
void mazePath()
{
Stack s;
initStack(&s);
Point cur = {0, 0};
Point next;
while (cur.x != ROW - 1 || cur.y != COL - 1) {
maze[cur.x][cur.y] = 'X';
push(&s, cur);
int direction = getNextDirection(cur, &next);
if (direction != -1) {
cur = next;
} else {
cur = pop(&s);
}
}
while (!isEmpty(&s)) {
cur = pop(&s);
maze[cur.x][cur.y] = ' ';
}
}
// 输出迷宫地图
void printMaze()
{
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%c ", maze[i][j]);
}
printf("\n");
}
}
int main()
{
mazePath();
printMaze();
return 0;
}
```
输出结果如下:
```
X X X X X X X O
O O O O O X O O
O X X X O X O O
O O O X O X O O
O X O X O X O O
O X X X X X O O
O O O O O O O O
O X X X X X X O
```
阅读全文