algorithm - 如何轻松知道迷宫是否有从起点到终点的道路?

标签 algorithm

我使用 0,1 数组实现了一个迷宫。入口和目标在迷宫中是固定的。入口始终是迷宫的 0,0 点。目标始终是迷宫的 m-1,n-1 点。我目前使用的是广度优先搜索算法,但是速度不够好。特别适用于大型迷宫(100*100左右)。有人可以帮我解决这个算法吗?

这是我的解决方案:

queue = []
position = start_node
mark_tried(position)
queue << position
while(!queue.empty?)
  p = queue.shift  #pop the first element
  return true if maze.goal?(p)
  left = p.left
  visit(queue,left) if can_visit?(maze,left)
  right = p.right
  visit(queue,right) if can_visit?(maze,right)
  up = p.up
  visit(queue,up) if can_visit?(maze,up)
  down = p.down
  visit(queue,down) if can_visit?(maze,down)
end
return false

可以访问吗?方法检查节点是否在迷宫内,节点是否被访问,节点是否被阻塞。

最佳答案

可能的最差答案。

1)往前走,直到你不能动为止

2)向左转

3) 冲洗并重复。

如果你成功了,那就结束了。

更好的解决方案。

遍历您的迷宫,为开放节点和封闭节点保留 2 个列表。使用著名的A-Star算法 选择评估下一个节点并丢弃死胡同的节点。如果您用完了打开列表中的节点,则没有导出。

关于algorithm - 如何轻松知道迷宫是否有从起点到终点的道路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720803/

相关文章:

php - 计算夜间月光时间的算法

algorithm - 最小方差生成树的多项式时间算法

java - 查找大 n 的组合数 C(n,r)(小数表示精度)

java - Java 中的二叉树插入

string - 搜索字符串中的某些单词或短语

algorithm - 到达目的地的最少停留

java - Java 中 TSP 的分支定界实现

c++ - 在 C++ STL 中分隔字母字符

java - 归并排序应用

python - 将第一个元素与列表中的最大元素交换-Python