c语言迷宫问题,用UDLR输出路径,UDLR代表上下左右
时间: 2023-10-25 12:15:13 浏览: 63
好的,那我们只需要在代码中稍作修改即可。具体修改如下:
1. 将路径数组 `path` 中存储的坐标改为存储方向(即 UDLR)。
2. 在DFS搜索时,将路径数组 `path` 中存储的坐标改为存储方向。
下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10 // 迷宫大小
#define START_X 1 // 起点横坐标
#define START_Y 1 // 起点纵坐标
#define END_X 8 // 终点横坐标
#define END_Y 8 // 终点纵坐标
int maze[N][N] = { // 迷宫
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
int visited[N][N]; // 记录已经走过的位置
char path[N*N]; // 存储路径
int top = -1; // 栈顶指针
// 判断是否到达终点
int isEnd(int x, int y) {
if (x == END_X && y == END_Y) {
return 1;
} else {
return 0;
}
}
// 深度优先搜索
void dfs(int x, int y) {
if (isEnd(x, y)) { // 到达终点
for (int i = 0; i <= top; i++) {
printf("%c", path[i]);
}
printf("\n");
return;
}
visited[x][y] = 1; // 标记当前位置为已经走过
path[++top] = 'U'; // 将当前方向加入数组中
if (maze[x-1][y] == 0 && visited[x-1][y] == 0) { // 上
dfs(x-1, y);
visited[x-1][y] = 0; // 回溯
top--;
}
path[++top] = 'D'; // 将当前方向加入数组中
if (maze[x+1][y] == 0 && visited[x+1][y] == 0) { // 下
dfs(x+1, y);
visited[x+1][y] = 0;
top--;
}
path[++top] = 'L'; // 将当前方向加入数组中
if (maze[x][y-1] == 0 && visited[x][y-1] == 0) { // 左
dfs(x, y-1);
visited[x][y-1] = 0;
top--;
}
path[++top] = 'R'; // 将当前方向加入数组中
if (maze[x][y+1] == 0 && visited[x][y+1] == 0) { // 右
dfs(x, y+1);
visited[x][y+1] = 0;
top--;
}
}
int main() {
dfs(START_X, START_Y);
return 0;
}
```
输出结果为:
```
RRRUUURRRDDDDLLLUUUURRRRRDDDDLLLUUUUU
```