深度优先遍历迷宫easyX
时间: 2023-07-18 12:03:34 浏览: 103
首先,我们需要使用easyX图形库绘制迷宫。可以使用如下代码创建一个窗口:
```c++
#include <graphics.h>
int main()
{
initgraph(640, 480); // 创建一个640*480的窗口
getch(); // 等待用户按下任意键
closegraph(); // 关闭图形界面
return 0;
}
```
接下来,我们需要定义迷宫的地图。我们可以用一个二维数组表示,1表示墙,0表示路。例如:
```c++
int map[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,0,1,1,1,1,0,1},
{1,0,0,0,0,0,0,1,0,1},
{1,1,0,1,1,1,0,1,0,1},
{1,0,0,0,0,0,0,1,0,1},
{1,0,1,0,1,1,1,1,0,1},
{1,0,1,0,0,0,0,0,0,1},
{1,0,0,0,1,1,1,1,0,1},
{1,1,1,1,1,1,1,1,1,1},
};
```
接着,我们需要定义一个函数来绘制迷宫。对于地图中的每一个位置,如果是墙,我们就绘制一个黑色的矩形;如果是路,我们就绘制一个白色的矩形。例如:
```c++
void drawMap(int map[][10])
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i][j] == 1) // 墙
{
setfillcolor(BLACK);
}
else // 路
{
setfillcolor(WHITE);
}
solidrectangle(j * 40, i * 40, (j + 1) * 40, (i + 1) * 40);
}
}
}
```
现在我们已经可以绘制出迷宫了。接下来,我们需要实现深度优先遍历算法来求解迷宫。深度优先遍历算法可以使用递归实现。我们从起点开始,依次访问与其相邻的路,直到找到终点。
```c++
void dfs(int x, int y, int map[][10])
{
if (x == 8 && y == 8) // 已到达终点
{
setfillcolor(GREEN);
solidrectangle(y * 40, x * 40, (y + 1) * 40, (x + 1) * 40);
return;
}
if (map[x][y] == 1) // 墙
{
return;
}
map[x][y] = 1; // 标记为已访问
setfillcolor(YELLOW);
solidrectangle(y * 40, x * 40, (y + 1) * 40, (x + 1) * 40);
if (x > 0) // 上
{
dfs(x - 1, y, map);
}
if (y > 0) // 左
{
dfs(x, y - 1, map);
}
if (x < 9) // 下
{
dfs(x + 1, y, map);
}
if (y < 9) // 右
{
dfs(x, y + 1, map);
}
}
```
最后,我们将绘制地图和求解迷宫的代码组合起来,完整的代码如下:
```c++
#include <graphics.h>
void drawMap(int map[][10])
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i][j] == 1) // 墙
{
setfillcolor(BLACK);
}
else // 路
{
setfillcolor(WHITE);
}
solidrectangle(j * 40, i * 40, (j + 1) * 40, (i + 1) * 40);
}
}
}
void dfs(int x, int y, int map[][10])
{
if (x == 8 && y == 8) // 已到达终点
{
setfillcolor(GREEN);
solidrectangle(y * 40, x * 40, (y + 1) * 40, (x + 1) * 40);
return;
}
if (map[x][y] == 1) // 墙
{
return;
}
map[x][y] = 1; // 标记为已访问
setfillcolor(YELLOW);
solidrectangle(y * 40, x * 40, (y + 1) * 40, (x + 1) * 40);
if (x > 0) // 上
{
dfs(x - 1, y, map);
}
if (y > 0) // 左
{
dfs(x, y - 1, map);
}
if (x < 9) // 下
{
dfs(x + 1, y, map);
}
if (y < 9) // 右
{
dfs(x, y + 1, map);
}
}
int main()
{
int map[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,0,1,1,1,1,0,1},
{1,0,0,0,0,0,0,1,0,1},
{1,1,0,1,1,1,0,1,0,1},
{1,0,0,0,0,0,0,1,0,1},
{1,0,1,0,1,1,1,1,0,1},
{1,0,1,0,0,0,0,0,0,1},
{1,0,0,0,1,1,1,1,0,1},
{1,1,1,1,1,1,1,1,1,1},
};
initgraph(400, 400);
drawMap(map);
dfs(1, 1, map);
getch();
closegraph();
return 0;
}
```
运行程序,即可看到求解迷宫的过程。
阅读全文