用图的深度优先遍历实现迷宫问题从(1,1)到(8,8)C语言实现
时间: 2024-10-12 09:16:15 浏览: 40
深度优先搜索(DFS)是一种解决迷宫问题的经典算法,它通过探索当前节点的所有邻接节点,直到找到目标节点或无法再继续为止。下面是使用C语言实现从(1,1)到(8,8)的简单深度优先遍历迷宫问题的一个示例:
```c
#include <stdio.h>
#define ROWS 9 // 迷宫大小为9x9
#define COLS 9
typedef struct {
int maze[ROWS][COLS];
int visited[ROWS][COLS]; // 访问标志
} Maze;
// 检查当前位置是否有效,并检查是否有障碍物
int isValid(int row, int col, Maze *maze) {
return row >= 0 && row < ROWS && col >= 0 && col < COLS && !maze->maze[row][col];
}
// 深度优先遍历
void DFS(int startRow, int startCol, Maze *maze, int targetRow, int targetCol) {
maze->visited[startRow][startCol] = 1; // 标记起始点已访问
if (startRow == targetRow && startCol == targetCol) { // 到达目标
printf("(%d,%d) -> (%d,%d)\n", startRow, startCol, targetRow, targetCol);
return;
}
// 遍历四个相邻方向
for (int direction = 0; direction < 4; direction++) {
int newRow = startRow + (direction / 2); // 右、下、左、上
int newCol = startCol + (direction % 2); // 右、下、左、上
if (isValid(newRow, newCol, maze)) {
DFS(newRow, newCol, maze, targetRow, targetCol);
}
}
}
int main() {
Maze maze;
// 初始化迷宫数组,这里假设所有空格为1(通行),其他为0(障碍)
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
maze.maze[i][j] = 1;
}
}
// 起始点(1,1)和目标点(8,8)
DFS(0, 0, &maze, ROWS - 1, COLS - 1);
return 0;
}
```
这个程序会输出从起点到终点的路径。如果你的迷宫有特定的障碍设置,只需改变`maze.maze`的值即可。注意,由于C语言数组索引是从0开始的,所以迷宫的左上角是(0,0),而不是题目给出的(1,1)。
阅读全文