数据结构问题-附加了条件的最短路径问题(100分)

  • 主题发起人 主题发起人 smithcouple
  • 开始时间 开始时间
S

smithcouple

Unregistered / Unconfirmed
GUEST, unregistred user!
刚刚参考了http://www.delphibbs.com/keylife/iblog_show.asp?xid=684
这个计算最短路径,并且得出此路径的方法真不错,我也受益匪浅,稍微改动了一下,目前可以计算同时存在多条最短路径的情况了(即几条路径同时都是最短的,而不是只算出第一条最短路径)

但我又想到了一个问题,既然可以求出最短路径,能否扩大到计算路径值“小于某一数值”的所有路径情况呢?也就是说,输入一个起点,输入一个终点,再输入路径值,然后计算出这两个端点之间路径值小于输入数值的所有路径情况。还能够标示出这写些路径的走向,即从起点经过哪些点最终到达终点,以及它们的路径长度。 苦思凝想了一上午了 也没有想出好的算法。
开始想法是,将整个无向图全部拆开成一条一条的路径,然后一条一条的比较权值分析,最后得到所有符合条件的路径。但马上就被自己否定了。

不知道大家平时遇到这类问题都是怎么处理的?希望能提供些思路,如果能有相关算法代码更好咯~~

如果分数不够,我可以用其他帖子转,谢谢!
 
如果规定路径中的一个节点不能被多次通过,那么还是不难的。不过,由于没有了“最”
的限制,就不能用简单的择优法了。简单的套用广度优先搜索,复杂度又可能难以接受。可
能用双向搜索(限制最大路径长度)可以将求解的时间复杂度控制在可以接受的范围内。

双向搜索的策略:已知起点和终点,利用标号法,从两个端点同时开始最短路径的标号(
同步进行递推),直到遇到被另一方标注的节点或者超出路径长度的限制。对于双方都推进
到的中间节点,根据两个方向最短路径的和来判定是否满足总长度的限制条件。对于满足限
制的节点,继续套用双向搜索(不过,最大路径长度要相应的缩短——减去节点到另一端的
最短距离)。不过,由于最后依然要进行大量的组合求和工作,我以为意义实在不大。
不过,似乎可以利用双向递推过程中对各个节点的采纳次数生成一个覆盖位于合理路径中
的节点(以及路径)的概率云——越靠近最优路径的点,被采纳的概率一般来说就越大——
我以为,穷举出每条可能路径意义不大,而能够得到这样一张图,估计楼主的原意就已经达
到了。


ps: 楼主还是将这个问题放到“基础篇 - 数据结构”分类中去吧。
 
用a*算法 找最短路径最有效, 或者用遗传算法.
 
楼上的误人子弟
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
后退
顶部