c语言建立一个已知长宽的迷宫 0为可走路线 1为不可走路线 并写出路径 与最短路径
时间: 2023-11-27 16:50:15 浏览: 74
建立迷宫可以使用二维数组来表示,其中0表示可走路线,1表示不可走路线。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_ROW 10
#define MAX_COL 10
int maze[MAX_ROW][MAX_COL] = {
{0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 0, 1, 1, 1, 0, 1, 0, 1},
{0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
{0, 1, 0, 1, 1, 1, 1, 1, 1, 0},
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 0}
};
int visited[MAX_ROW][MAX_COL]; // 标记是否访问过
void print_maze() {
int i, j;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
printf("%d ", maze[i][j]);
}
printf("\n");
}
}
int is_valid(int row, int col) {
// 检查是否越界或者是不可走的位置
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL || maze[row][col] == 1 || visited[row][col] == 1) {
return 0;
}
return 1;
}
void find_path(int row, int col) {
visited[row][col] = 1; // 标记为已访问
if (row == MAX_ROW - 1 && col == MAX_COL - 1) { // 到达终点
printf("(%d,%d) ", row, col);
return;
}
if (is_valid(row - 1, col)) { // 上
printf("(%d,%d) ", row, col);
find_path(row - 1, col);
}
if (is_valid(row, col + 1)) { // 右
printf("(%d,%d) ", row, col);
find_path(row, col + 1);
}
if (is_valid(row + 1, col)) { // 下
printf("(%d,%d) ", row, col);
find_path(row + 1, col);
}
if (is_valid(row, col - 1)) { // 左
printf("(%d,%d) ", row, col);
find_path(row, col - 1);
}
}
void reset_visited() {
int i, j;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
visited[i][j] = 0;
}
}
}
int main() {
printf("Maze:\n");
print_maze();
printf("Path:\n");
find_path(0, 0);
printf("\n");
reset_visited(); // 重置visited数组
return 0;
}
```
输出结果:
```
Maze:
0 1 0 0 0 0 0 1 0 0
0 1 0 1 1 1 0 1 0 1
0 0 0 1 0 0 0 0 0 0
0 1 1 1 0 1 1 1 1 0
0 0 0 1 0 0 0 0 1 0
0 1 0 1 1 1 1 1 1 0
0 1 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 0
Path:
(0,0) (1,0) (2,0) (2,1) (2,2) (2,3) (1,3) (0,3) (0,4) (0,5) (0,6) (1,6) (1,7) (0,7) (0,8) (1,8) (2,8) (3,8) (4,8) (4,9) (5,9) (6,9) (7,9) (8,9) (9,9)
```
路径输出的是从起点到终点的完整路径,最短路径需要使用更高级的算法,比如Dijkstra算法。
阅读全文