交通路口迷宫问题c语言完整代码
时间: 2024-10-28 10:04:11 浏览: 29
交通路口迷宫问题通常是一个经典的搜索算法问题,可以使用递归回溯法或者广度优先搜索(BFS)来解决。这里提供一个简单的C语言版本的深度优先搜索(DFS)解迷宫算法示例。假设迷宫用二维数组表示,0代表空地,1代表墙壁:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 5 // 迷宫行数
#define COLS 5 // 迷宫列数
// 检查当前位置是否可行
int is_valid(int maze[ROWS][COLS], int row, int col) {
return row >= 0 && row < ROWS && col >= 0 && col < COLS && maze[row][col] == 0;
}
// 动态规划 - DFS 解决迷宫问题
void solve_maze(int maze[ROWS][COLS], int start_row, int start_col, int end_row, int end_col, int sol[][COLS]) {
int sol_row = 0; // 当前解决方案的行数
if (start_row == end_row && start_col == end_col) {
sol[sol_row][start_col] = 1;
printf("Solution found: %d %d\n", start_row + 1, start_col + 1); // 输出路径
sol_row++;
return;
}
// 检查相邻位置并递归探索
if (is_valid(maze, start_row+1, start_col)) {
sol[sol_row][start_col] = 1;
solve_maze(maze, start_row+1, start_col, end_row, end_col, sol);
sol_row++;
}
if (is_valid(maze, start_row-1, start_col)) {
sol[sol_row][start_col] = 1;
solve_maze(maze, start_row-1, start_col, end_row, end_col, sol);
sol_row++;
}
if (is_valid(maze, start_row, start_col+1)) {
sol[sol_row][start_col] = 1;
solve_maze(maze, start_row, start_col+1, end_row, end_col, sol);
sol_row++;
}
if (is_valid(maze, start_row, start_col-1)) {
sol[sol_row][start_col] = 1;
solve_maze(maze, start_row, start_col-1, end_row, end_col, sol);
sol_row++;
}
}
int main() {
int maze[ROWS][COLS] = { // 示例迷宫
{1, 0, 0, 0, 1},
{1, 0, 0, 0, 1},
{0, 0, 0, 1, 0},
{0, 0, 0, 1, 1},
{0, 0, 1, 0, 1}
};
int end_row = ROWS - 1;
int end_col = COLS - 1;
int sol[ROWS][COLS]; // 存储解决方案的矩阵
solve_maze(maze, 0, 0, end_row, end_col, sol);
return 0;
}
```
阅读全文