对于2D迷宫,您可以简单地使用广度优先搜索而不是深度优先搜索,如果您有n * n个迷宫,它将在O(n 2)中找到它。
但是还有另一种选择,它是一种标签和BFS,可在您的迷宫上工作(无需绘制图形)。
编号算法
理解广度优先搜索的一种有趣方法是以这种方式(对于迷宫)进行搜索:
将所有单元格设置为0,并将块设置为-1
从源位置开始,将其设置为1,将所有0个邻居标记为2,并将所有2个邻居保存在列表中。之后,将2的所有0个邻居标记为3,清除2的列表并保存3的列表,然后继续到达目的地。在每个级别中,请勿更改源值。
现在假设您在目的地并且想要查找路径,您的目的地的得分为m,找到得分为m-1的邻居,....并输出路径。
实际上,BFS的常规和简单方式就是使用Q,但是我之所以提供此功能是因为它很简单,因为它模拟了Q方式。
使用邻接矩阵
为了创建邻接矩阵,您应该命名节点和边,因此您可以为边缘和节点设置一个如下所示的类(我用伪C#编写):
public class Edge{ public Edge(Node start, Node end, decimal weight) { StartNode = ...,...,... } public Node StartNode; public Node EndNode; public decimal weight; public bool IsDirected;}public class Node{ public Node(int index) { this.Index = index; } public int Index; public List<Edge> Edges = new List<Edge>(); public bool Visited = false;}现在,您的图形是您的Node对象的列表:
public class Graph{ public List<Node> Nodes = new List<Node>();}对于建模迷宫,您应该选择单元作为节点,并在相邻单元之间绘制边缘。我将留给您如何在图上添加节点。



