标签:path-finding dijkstra c algorithm
使用Dijkstra的算法wiki Dijkstra’s,我已经可以找到两个顶点之间的最短路径.
但.我的某些边缘被用作“检查点”,因为您必须至少经过一个检查点才能使路由可用.
有时,算法会找到不包含这些边缘检查点的路径.在这种情况下,我想找到第二个.最短路线-如果该路线也不包含检查点,则找到第3条路线.最短的路线,依此类推.
有什么想法可以让我入门吗?
编辑:
是否有可能遍历第一条路线上的所有前任路线,然后从前任路线到目的地运行Dijkstras(并排除前任路线的下一个goto顶点的原始选择).这样,我可能会找到所有可能的路线,然后将它们相互比较?
例.
A =来源
Z =目的地
最短路径:A-> B-> C-> D-> ž
2号最短路径:A-> B-> C-> D-> “成本最低的顶点,不是Z”(如果在当前尝试中找不到所有可用D的邻居,则将其循环通过所有D的未访问邻居)
如果第二.最短路径也不包含检查点,请尝试第3个最短路径
第三名最短路径:A-> B-> C->成本最低的顶点,不是D
还是这种解决方案根本不可能?
编辑2:
可能很难看到,但是紫色的1×3像素是顶点.黄色的道路是边缘,粉红色的3×3像素也是边缘.粉色的也称为检查点.因此,我必须找到最短的路线并至少通过一个检查站.
解决方法:
您可以尝试几种方法来完成这项工作.
让我们将S称为起始节点,将D称为目标节点,将I称为中间节点.
[单个中间节点]
一个简单但次优的解决方案是使用从S到I的Dijkstra,然后将Dijkstra的结果从I附加到D.
[多个中间节点]
正如Niklas B.指出的那样,一种可行的方法是“根据S和D建立最短路径树.对于每个中间节点A,检查d(S,A)d(T,A).最小值为解决方案.运行时为是Dijkstra的两倍,例如具有二进制堆的O((nm)log n)”.
标签:path-finding,dijkstra,c,algorithm
来源: https://codeday.me/bug/20191121/2053115.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。