Questions tagged «shortest-path»

7
寻找最短路径时,广度优先搜索如何工作?
我已经进行了一些研究,但似乎缺少该算法的一小部分。我了解广度优先搜索的工作原理,但我不了解它如何将我带到特定的路径,而不是仅仅告诉我每个节点可以到达的位置。我想解释我的困惑的最简单方法是提供一个示例: 例如,假设我有一个这样的图形: 我的目标是从A到E(所有边均未加权)。 我从A开始,因为那是我的血统。我排队A,然后立即将A出队并对其进行探索。因为A连接到B和D,所以得到B和D。因此,我将B和D都排队。 我将B出队并进行探索,发现它导致了A(已经探索过)和C,因此我将C排队。然后出队D,发现它导致了我的目标E。然后我将C出队,并发现它也导致了我的目标E。 我从逻辑上知道最快的路径是A-> D-> E,但是我不确定广度优先搜索到底有多大帮助-我应该如何记录路径,以便在完成后可以分析结果并查看最短的路径是A-> D-> E? 另外,请注意,我实际上并没有使用树,因此没有“父”节点,只有子节点。


8
使用Dijkstra算法的负权重
我试图理解为什么Dijkstra的算法不能在负权重下工作。阅读有关最短路径的示例,我试图找出以下情况: 2 A-------B \ / 3 \ / -2 \ / C 从网站: 假设所有边缘都是从左到右定向的,如果我们从A开始,Dijkstra的算法将选择使d(A,A)+ length(edge)最小的边缘(A,x),即(A,B)。然后设置d(A,B)= 2并选择另一个使d(A,y)+ d(y,C)最小的边(y,C); 唯一的选择是(A,C),它设置d(A,C)= 3。但是,它永远找不到从A到B的最短路径,即C,总长度为1。 我不明白为什么使用下面的Dijkstra实现时,d [B]不会更新为1(当算法到达顶点C时,它将在B上运行放松,看到d [B]等于2,因此更新其值为1)。 Dijkstra(G, w, s) { Initialize-Single-Source(G, s) S ← Ø Q ← V[G]//priority queue by d[v] while Q ≠ Ø do u ← Extract-Min(Q) S ← S U {u} …

16
棋Che上的骑士最短路径
我一直在为即将到来的编程比赛做练习,但偶然发现了一个我完全困惑的问题。但是,我觉得这是我现在应该学习的概念,而不是费力地讲它永远不会出现。 基本上,它处理棋盘上的骑士棋子。系统将为您提供两个输入:开始位置和结束位置。然后,目标是计算并打印骑士可以到达目标位置的最短路径。 我从来没有处理过最短路径的事情,甚至都不知道从哪里开始。我采用什么逻辑来解决这个问题? PS:如果有任何相关性,他们希望您通过允许骑士移动到由骑士可以(可能)进行的(可能)八次移动所形成的正方形的四个角来补充骑士的常规移动,以补充正方形的中心骑士的位置。

9
大型图形的A *算法,对缓存快捷方式有何想法?
我正在OpenStreetMap地图上编写快递/后勤仿真,并且已经意识到,如下图所示的基本A *算法对于大型地图(例如大伦敦)来说不够快。 绿色节点对应于放置在开放集/优先级队列中的节点,由于数量巨大(整个地图大约为1-2百万),因此需要5秒钟左右的时间才能找到所描绘的路线。不幸的是,每条路线100ms大约是我的绝对极限。 当前,节点既存储在邻接表中,又存储在空间100x100 2D数组中。 我正在寻找可以权衡预处理时间,空间以及必要时优化路线以加快查询速度的方法。根据探查器,用于启发式成本的直线Haversine公式是最昂贵的函数-我已尽我所能优化了基本A *。 例如,我在考虑,如果我从2D数组的每个象限中选择一个任意的节点X并在每个象限之间运行A *,我可以将路由存储到磁盘以进行后续仿真。查询时,我只能在象限中​​运行A *搜索,以在预先计算的路径和X之间进行搜索。 是否有我上面描述的更完善的版本,或者也许是我应该采用的其他方法。非常感谢! 为了记录在案,以下是一些基准测试结果,用于任意加权启发式成本并计算10对随机选取的节点之间的路径: Weight // AvgDist% // Time (ms) 1 1 1461.2 1.05 1 1327.2 1.1 1 900.7 1.2 1.019658848 196.4 1.3 1.027619169 53.6 1.4 1.044714394 33.6 1.5 1.063963413 25.5 1.6 1.071694171 24.1 1.7 1.084093229 24.3 1.8 1.092208509 22 1.9 1.109188175 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.