我需要一些帮助来编写一套if-then规则来遍历迷宫。这就是问题所在:
“假设迷宫是在方格单元网格上构建的,方法是将墙壁放置在单元格的某些边缘上,使得从迷宫内的任何单元格到迷宫的外边缘都有一条路径。没有墙。
一种方法是左手规则,但这种策略可以带你到周期。
用英语编写if-then规则,用于遍历墙并检测循环。假设你知道网格的大小和你可能要逃离迷宫的最大距离。“
这是我到目前为止所做的:
开始
如果只找到一条路径(左或右或直路),请按照路径行进。
否则如果找到多个路径:
如果找到左路,请左转。
否则,如果找到直线路径,请沿直线路径行驶。
否则,如果找到正确的路径,请右转。
否则如果找到死角,请转“U”。
转到第2步
结束
但这不是解决循环问题。有人可以帮忙吗?
答案 0 :(得分:3)
这是探索图形的两种通用算法:广度优先搜索(BFS)和深度优先搜索(DFS)。这些算法的技巧是它们从未探索列表中的所有路径开始,并且当它们访问路径时,它们将这些路径添加到探索列表中。当您访问每个节点时,您将其从未探索列表中删除,因此您不会再次访问它。通过在每种情况下仅从未探索的列表中提取节点,您没有自己的双重情况。
以下是DFS的示例,其中包含用于防止循环和BFS的检查:
function DFS(G,v):
label v as explored
for all edges e in G.adjacentEdges(v) do
if edge e is unexplored then
w ← G.adjacentVertex(v,e)
if vertex w is unexplored then
label e as a discovery edge
recursively call DFS(G,w)
else
label e as a back edge
现在BFS:
procedure BFS(G,v):
create a queue Q
enqueue v onto Q
mark v
while Q is not empty:
t ← Q.dequeue()
if t is what we are looking for:
return t
for all edges e in G.adjacentEdges(t) do
u ← G.adjacentVertex(t,e)
if u is not marked:
mark u
enqueue u onto Q
return none