两点间所有最短路径的求法

Sybil_aoi 2017-05-07 11:11:04
我使用的是Dijkstra算法,已经按照书上所述求出了各点到起点的最短路径,但为了考虑有多条最短路径的情况,我建立了一个(N-1)*(N-1)的二维数组,一行归一个节点所有,若再有相同长度的路径可用,就将新的“上一个节点”存储在属于它的这一行内。现在的问题是,存储是存储了,要怎样读取呢?人的思维可以轻易知道这条路自己是否走过,在程序里却很难让计算机知道,若要将某条边或某个节点标记为已用,万一下一条路还会绕过这边又怎么办呢?我找不到能让计算机理解的方法,因此来求助,这个问题想了好几天,现在时间已经有点紧了。
PS.有时间复杂度的要求,故删边再遍历的算法不做考虑
两图分别为书上的示范和我自己画来测试的图,书上的pv那一行存储的即为“最短路径中的上一个节点”,我只不过比他多了一个二维数组
...全文
1847 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sybil_aoi 2017-07-25
  • 打赏
  • 举报
回复
问题已经解决。我放弃了这种存储方式。因为我发现虽然理论上可行,但实际执行却不可能。 所以我最后改了存储方式,如果读到两条长度相同的路径,马上比较这两条路径的次一级条件(在我们的问题里是需要携带的自行车的多少),比较完了再把其中更优的那条存进来。始终只存储一条路径。
zhengjiankang 2017-07-18
  • 打赏
  • 举报
回复
A*,,要6个字才能提交。
xskxzr 2017-07-18
  • 打赏
  • 举报
回复
你是指最后还原成路径时的读取吗? 把“之前的点”看成当前点的孩子,构造一棵树,然后DFS即可。 比如你的例子,如果终点是6的话,就是这样一棵树 6 ↓↘ 5 3 ↓ ↓ 4 1 ↓ 2 ↓↘ 1 3 ↓ 1 DFS遍历就能得到你要的3条路径。
赵4老师 2017-05-08
  • 打赏
  • 举报
回复
搜“动态规划”
Sybil_aoi 2017-05-07
  • 打赏
  • 举报
回复
Sybil_aoi 2017-05-07
  • 打赏
  • 举报
回复
我此前写程序一直是以计算机来模仿人的思维,把人的思维变成一个个他可以识别的步骤来做的,但这次我发现,人类在处理这个问题的时候,实质上的思维谁不定重循环,此题要求的节点数有500个,显然是不可能在程序里放入一个500重循环的。请问诸位有没有其他的解法?此题实在要紧。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧