c语言输出迷宫地图和路径,路径用坐标输出,上下左右坐标用UDLR输出
时间: 2023-12-14 07:36:46 浏览: 65
走迷宫程序C语言版显示走的路径
4星 · 用户满意度95%
以下是一份简单的 C 代码,可以输出迷宫地图和路径,并使用 UDLR 表示上下左右方向:
```c
#include <stdio.h>
#define ROWS 10
#define COLS 10
int maze[ROWS][COLS] = {
{1, 1, 1, 0, 1, 1, 0, 1, 1, 1},
{1, 0, 1, 1, 1, 0, 1, 1, 0, 1},
{1, 0, 0, 0, 1, 0, 1, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 0, 0, 1, 0, 0, 0, 1, 1},
{1, 0, 1, 0, 1, 1, 1, 0, 0, 1},
{1, 0, 0, 0, 0, 1, 0, 0, 0, 1},
{0, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{0, 1, 1, 0, 0, 0, 0, 1, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
int visited[ROWS][COLS] = {0};
int path[ROWS * COLS][2] = {0};
int path_length = 0;
void print_maze() {
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (maze[i][j] == 1) {
printf("[]");
} else {
printf(" ");
}
}
printf("\n");
}
}
void print_path() {
int i;
for (i = 0; i < path_length; i++) {
int x = path[i][0];
int y = path[i][1];
char dir = ' ';
if (i > 0) {
int prev_x = path[i-1][0];
int prev_y = path[i-1][1];
if (x == prev_x-1) {
dir = 'U';
} else if (x == prev_x+1) {
dir = 'D';
} else if (y == prev_y-1) {
dir = 'L';
} else if (y == prev_y+1) {
dir = 'R';
}
}
printf("(%d,%d)%c ", x, y, dir);
}
printf("\n");
}
int find_path(int x, int y) {
if (x < 0 || x >= ROWS || y < 0 || y >= COLS) {
return 0;
}
if (maze[x][y] == 0 || visited[x][y] == 1) {
return 0;
}
if (x == ROWS-1 && y == COLS-1) {
path[path_length][0] = x;
path[path_length][1] = y;
path_length++;
return 1;
}
visited[x][y] = 1;
if (find_path(x-1, y) || find_path(x+1, y) || find_path(x, y-1) || find_path(x, y+1)) {
path[path_length][0] = x;
path[path_length][1] = y;
path_length++;
return 1;
}
return 0;
}
int main() {
printf("Maze:\n");
print_maze();
printf("\n");
if (find_path(0, 0)) {
printf("Path:\n");
print_path();
} else {
printf("No path found.\n");
}
return 0;
}
```
代码中,`maze` 数组表示迷宫地图,`visited` 数组表示某个位置是否已经访问过,`path` 数组存储路径的坐标,`path_length` 表示路径的长度。`print_maze()` 和 `print_path()` 分别用于输出迷宫地图和路径。`find_path()` 函数使用递归实现深度优先搜索,查找从起点 `(0, 0)` 到终点 `(ROWS-1, COLS-1)` 的路径。在递归搜索时,如果当前位置已经超出了迷宫范围、或者当前位置是障碍物、或者当前位置已经访问过,则返回 0;如果当前位置是终点,则将当前位置加入路径中并返回 1;否则,继续向四个方向递归搜索。如果找到了一条路径,则将当前位置加入路径中并返回 1。
在 `print_path()` 函数中,根据路径的坐标计算出相邻两个坐标之间的方向,并使用 UDLR 表示上下左右方向。
阅读全文