迷宫问题c语言
时间: 2023-08-24 11:10:46 浏览: 101
以下是一个简单的迷宫问题C语言实现的代码:
```c
#include <stdio.h>
#define N 5
// 定义迷宫
int maze[N][N] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 0}
};
// 定义路径数组
int path[N][N] = {0};
// 输出迷宫
void printMaze() {
printf("迷宫:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
}
// 输出路径
void printPath() {
printf("路径:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", path[i][j]);
}
printf("\n");
}
}
// 判断当前位置是否可以走
int canMove(int x, int y) {
if (x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 0 && path[x][y] == 0) {
return 1;
} else {
return 0;
}
}
// 递归搜索路径
int findPath(int x, int y) {
if (x == N - 1 && y == N - 1) { // 如果已经到达终点
path[x][y] = 1;
return 1;
}
if (canMove(x, y)) { // 如果当前位置可以走
path[x][y] = 1;
if (findPath(x, y + 1)) { // 向右走
return 1;
}
if (findPath(x + 1, y)) { // 向下走
return 1;
}
if (findPath(x, y - 1)) { // 向左走
return 1;
}
if (findPath(x - 1, y)) { // 向上走
return 1;
}
path[x][y] = 0; // 如果四个方向都不能走,则回溯
return 0;
} else {
return 0;
}
}
int main() {
printMaze();
if (findPath(0, 0)) {
printPath();
} else {
printf("没有找到路径!\n");
}
return 0;
}
```
这个程序使用递归方法来搜索迷宫路径,从起点 `(0, 0)` 开始搜索。如果当前位置可以走,则标记该位置已经走过,并尝试向右、向下、向左、向上四个方向搜索。如果四个方向都不能走,则回溯到上一个位置,并标记该位置不能走。最终如果找到了终点 `(N-1, N-1)`,则输出路径;否则输出没有找到路径的提示。
阅读全文