C语言最优路线走迷宫代码
时间: 2023-07-09 08:50:43 浏览: 93
c语言走迷宫
3星 · 编辑精心推荐
以下是一个简单的 C 语言迷宫寻路代码示例:
```c
#include <stdio.h>
#define ROW 8 // 迷宫行数
#define COL 8 // 迷宫列数
int maze[ROW][COL] = { // 0 表示空地,1 表示障碍
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 1, 0, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};
int path[ROW * COL][2]; // 存储路径
int top = -1; // 栈顶指针
void push(int r, int c) { // 入栈
top++;
path[top][0] = r;
path[top][1] = c;
}
void pop() { // 出栈
top--;
}
int main() {
int r = 1, c = 1; // 起点坐标
push(r, c); // 入栈
maze[r][c] = 2; // 标记为已访问
while (top > -1) { // 栈不为空时循环
r = path[top][0];
c = path[top][1];
if (r == ROW - 2 && c == COL - 2) { // 到达终点
printf("找到了一条路径:\n");
for (int i = 0; i <= top; i++) {
printf("(%d,%d) ", path[i][0], path[i][1]);
}
return 0;
}
if (maze[r - 1][c] == 0) { // 上方可走
push(r - 1, c);
maze[r - 1][c] = 2;
} else if (maze[r][c + 1] == 0) { // 右方可走
push(r, c + 1);
maze[r][c + 1] = 2;
} else if (maze[r + 1][c] == 0) { // 下方可走
push(r + 1, c);
maze[r + 1][c] = 2;
} else if (maze[r][c - 1] == 0) { // 左方可走
push(r, c - 1);
maze[r][c - 1] = 2;
} else { // 四个方向都不可走,回溯
pop();
}
}
printf("未找到路径!\n");
return 0;
}
```
这个示例使用了深度优先搜索算法和栈来实现迷宫寻路。代码中的 `maze` 数组表示迷宫地图,0 表示空地,1 表示障碍,2 表示已访问的空地。`path` 数组用来存储路径,`top` 变量表示栈顶指针。`push` 和 `pop` 函数分别实现入栈和出栈操作。算法从起点开始,不断向四个方向探索,直到找到终点或者所有路径都被探索完毕。如果找到了一条路径,就输出路径上的所有坐标。如果所有路径都被探索完毕,就输出未找到路径的提示。
阅读全文