迷宫问题c语言完整代码
时间: 2023-08-24 11:15:40 浏览: 100
以下是一个简单的迷宫问题的 C 语言代码,使用了深度优先搜索算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define ROW 5
#define COL 5
int maze[ROW][COL] = {
{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}
};
bool visited[ROW][COL];
int start_row = 0, start_col = 0;
int end_row = 4, end_col = 4;
bool valid(int row, int col) {
return row >= 0 && row < ROW && col >= 0 && col < COL && maze[row][col] == 0 && !visited[row][col];
}
bool solve(int row, int col) {
visited[row][col] = true;
if (row == end_row && col == end_col) {
return true;
}
if (valid(row - 1, col) && solve(row - 1, col)) {
return true;
}
if (valid(row + 1, col) && solve(row + 1, col)) {
return true;
}
if (valid(row, col - 1) && solve(row, col - 1)) {
return true;
}
if (valid(row, col + 1) && solve(row, col + 1)) {
return true;
}
return false;
}
int main() {
if (solve(start_row, start_col)) {
printf("Maze has a solution!\n");
} else {
printf("Maze has no solution.\n");
}
return 0;
}
```
在 `maze` 数组中,0 表示空格,1 表示障碍。`visited` 数组用于记录一个格子是否已经被访问过,避免重复访问。`valid` 函数用于判断一个格子是否可以访问。在 `solve` 函数中,先将当前格子标记为已访问,然后依次尝试访问上、下、左、右四个相邻格子,如果有一个格子可以访问,则递归访问这个格子,直到找到终点或者所有格子都已访问过。如果找到终点,则返回 `true`,否则返回 `false`。最后在 `main` 函数中调用 `solve` 函数,判断是否有解。
阅读全文