大家好,今天我分享的是用图求解迷宫问题。我们知道用栈和递归求解出的路径并不是最简的路径,队列求解出的路径是最短路径,而图求解出的迷宫路径是怎样的呢?
目录如下可快速查阅
算法描述
1. 用二维数组定义迷宫;
2. 将二维数组中值为0,即空白可走的位置看成结点;
3. 将所有结点的邻接矩阵求出;
4. 深度优先遍历找到迷宫终点,记录输出即可;
用二维数组定义迷宫
首先我们用一个二维数组建立迷宫地图( 其中1表示障碍,0表示可走坐标):
将二维数组中值为0,即空白可走的位置看成结点
像这样构建结构体以存储结点信息
typedef struct ANode//邻接表结点
{
int hang; //记录位置
int lie;
struct ANode *nextarc;
}ArcNode;
然后将所有值为0的点都记录;
将所有结点的邻接矩阵求出
将一个点的上下左右四个方向的进行判断,可行就加入该结点的邻接矩阵;
也就是相当于构建了所有空白位置的邻接矩阵。
深度优先遍历找到迷宫终点,记录并输出
按图的深度优先遍历方式,从起点开始将构建的邻接矩阵遍历,直到找到迷宫的终点,则将路径的点都做上标记,输出路径即可;
代码清单
构建图部分
#include <iostream>
using namespace std;
#define MAXV 15
#define num 10
#define h_end 8
#define l_end 8
//建立迷宫
// 0 1 2 3 4 5 6 7 8 9
int a[][num]={
1,1,1,1,1,1,1,1,1,1,
1,0,1,0,0,0,1,1,1,1,
1,0,0,0,0,0,1,0,0,1,
1,0,1,0,0,0,1,0,0,1,
1,0,1,1,1,1,0,0,1,1,
1,0,0,</