java – 具有最大顶点数的最短路径
作者:互联网
我想找到两个顶点之间的最短路径和一个额外的约束:可以访问max n个顶点.该图是定向的,连接的,非负权重,并且可以包含循环.
例:
> n = 2的最短路径0-> 2是18
> n = 3的最短路径0-> 3是22
> n = 4的最短路径0-> 3是9
到目前为止,我已经实现了Djikstras算法以获得简单的最短路径,我的想法是保持当前访问的顶点的计数器,如果它超过n它需要一个或多个步骤并尝试使用另一个路径..但到目前为止据我所知,Djikstras不能用于here所述的回溯.
另一个想法是以某种方式存储表中每个节点之间的每条路径.但我不确定Djikstra如何发现重量为18的路径0-> 2,因为它不是真正的最短路径……
有没有人有任何想法如何解决这个问题?
解决方法:
将每个顶点划分为n个顶点,即对于顶点u,我们创建n个顶点,表示为(u,1)…(u,n),第二个数字表示到此顶点的步数.对于从u到v的每个边,我们创建从(u,i)到(v,i 1)的边,其中在新图中1< = i< = n-1.现在,如果你想用u计算u和v之间的最短路径,只需从(u,1)做Dijkstra,那么你的答案就是min(结果(v,i)| 1< = i< = n) 顶点总数可以是n * n,因此复杂度约为O(n ^ 2 * log(n ^ 2))
标签:java,algorithm,graph,graph-theory,graph-algorithm 来源: https://codeday.me/bug/20190829/1762435.html