【问题标题】:shortest path through a maze通过迷宫的最短路径
【发布时间】:2010-07-27 03:41:25
【问题描述】:

我正在做一个项目,我必须使用左手规则穿过迷宫,并且根据程序遇到的交叉点,我需要创建一个节点来连接到一个图,然后我将确定最短路径。目标是让程序在迷宫中运行,然后关闭程序并从包含图形的文件中读取并确定到达终点的最短路径。我所做的是我可以使用左手规则穿越迷宫。我想做的是在找到交叉点时创建一个节点,并且在每次程序移动之后我都会将该路径的成本增加一倍。附带说明一下,使用 dijkstra 算法时是否需要邻接矩阵?

【问题讨论】:

  • 可以使用邻接矩阵,也可以使用数组列表(adjacency list)。不知道你所说的左手规则是什么意思,但我猜 dijkstra 的算法可以完成这项工作。
  • 不是所有的迷宫都可以用左手法则解决。忒修斯错了。
  • @Borealid:所有“完美迷宫”都可以;我假设这就是 OP 所指的......
  • 大声笑是的,我知道不是所有的迷宫都可以用左手规则(循环)解决,但我们使用的迷宫没有循环,可以用左手规则解决。跨度>

标签: java graph shortest-path maze


【解决方案1】:

试试这样的,应该可以的:

0 - 创建一个空的“解决方案路径”堆栈位置对象。 1 - 如果当前位置是迷宫出口,则返回“解决方案路径”堆栈。 2 - 前面的墙?左转并重复 2,否则继续 3。 3 - 如果当前位置位于“解决方案路径”堆栈的顶部, 将其从堆栈中弹出 否则将其压入堆栈 4 - 前进。

当您检查堆栈顶部的当前位置时,您可能需要检查最后一个元素之前的元素,因为最后一个元素将是您刚刚离开的位置。

【讨论】:

  • 哇,这实际上是个好主意,您不需要使用图表来实际找到最短路径。
  • 第 2 步不太对,即使你可以直走,也应该左转... 左转或直行或右转并推,或返回并弹出...虽然必须跑,不是时候更新了:)
  • 是的,你的想法很有效,不幸的是,我需要使用图形和 diijkstas 算法找到最短路径......任何想法如何做到这一点我都不知所措。我想也许我可以通过在程序每次到达交叉点时添加一条边来设置图表。然后每次你在那里和另一个十字路口之间移动。但这不起作用......也许我没有正确实现它或其他东西。(不是很懂图表哈哈)我会添加一些代码来显示如果我取得任何进展我在做什么!
猜你喜欢
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多