首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >顶点数最大的最短路径

顶点数最大的最短路径
EN

Stack Overflow用户
提问于 2015-10-27 03:57:48
回答 4查看 2.6K关注 0票数 5

我想找到两个顶点之间的最短路径,并附加一个约束:可以访问最大n个顶点。图是有向的、连通的、非负的权值,并且可能包含圈。

示例:

  1. 最短路径0->2n = 218
  2. 最短路径0->3n = 322
  3. 最短路径0->3n = 49

到目前为止,我已经实现了得到简单最短路径的贾克斯特拉斯算法,我的想法是保持当前访问顶点的计数器,如果它超过n,它需要后退一步或多步,然后尝试另一条路径。但据我所知,正如这里所解释的那样,贾克斯特拉斯不能用于回溯。

另一个想法是以某种方式存储表中每个节点之间的每条路径。但是我不太清楚贾克斯特拉怎么能发现重量为18的路径0->2,因为它并不是一条最短的路径.

有没有人知道如何解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-27 04:12:29

将每个顶点划分为n顶点,即对于顶点u,我们创建表示为(u, 1) ... (u, n)n顶点,第二个数表示到该顶点的步骤数。对于u到v的每一条边,我们在新图中创建了一个从(u,i)到(v,i+1)的边,其中1<=i<=n-1。现在,如果您想用n计算u与v之间的最短路径,只需从(u,1)处执行Dijkstra,则您的答案是min(result (v, i) | 1<=i<=n)

顶点的总数可以是n*n,所以复杂度是关于O(n^2*log(n^2))的。

票数 5
EN

Stack Overflow用户

发布于 2015-10-27 04:38:14

设COST_TO(v,n)是顶点v与n条边的最小路径的总权重。

当n=0时,答案很简单:

对于所有v,如果v是源顶点,则COST_T(v,0) =0,否则为无穷大。

对于n>0,COST_TO(v,n)是COST_TO(v,n-1)和所有COST_TO(w,n-1)+权重(w,v)的最小值,其中有从w到v的边。

因此,对于n=0到N,跟踪COST_(v,n) <无穷大的所有顶点及其代价,并根据n-1的值计算n的代价。

同时,您可以跟踪每个v的最小权重路径--每次使用边规则将成本更新为v时,v的新路径就是w+那个边的路径。一个反向单一链接的列表是方便的。

票数 2
EN

Stack Overflow用户

发布于 2015-10-27 04:16:16

也许尝试一个bfs并检查顶点的数目和最大值。保存那些满足约束条件的人。

这是一个关于它的视频,https://youtu.be/TvHV3PB8ANs

Nist.gov也有一些标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33359731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档