我有一个奇怪的寻路问题。在下图中,有两种边 - 红色和蓝色。红色边缘是可靠的,而蓝色边缘则不是 - 它们提供了快捷方式,但在某些情况下可能会消失或无法使用 - 您可以将它们视为冬季下雪的山口,或者不能操作的渡口在周末,或训练仅在通勤时间运行的线路。
我希望我的探路者能够产生一系列可能的路径。用户必须知道到达目的地的最快的不可靠方式,以及如果该路径不可用的可能替代方案。探路者应该产生最短的路线(在图中,使用蓝色边缘' b' 3跳)和最短的可靠路线 - (5个跳跃,仅使用红色边缘)以及所有其他可能的路线比可靠路线短,并利用不可靠的蓝色边缘。
对于图表,这些是可能的排列:
我对此算法的第一次尝试如下:
但是,此算法并不完整,因为它可能会遗漏一些可能的路径。在上面的示例中,路径仅使用edge' a'将被遗漏(包括所有其他路径。)
我的下一个想法是搜索每个可能的蓝色边缘组合:[a], [b], [c], [d], [a,b], [a,c], ..., [a,b,c,d]
。当然,这是非常低效的,并且可能不适用于大量的蓝色边缘。
您能想到任何可以帮助我的解决方案吗?我需要一个:
前者是最好的解决方案,但后来我可以跑,比方说,10秒,然后返回至少一个很好的短路径到目的地。
顺便提一下,我对图表的大小非常了解:大约有7000个顶点,30,000个红色边缘和200个蓝色边缘。
我确定之前已经考虑过这种问题,但我找不到任何关于它的文章。你能指出我正确的方向吗?
答案 0 :(得分:1)
我可以看到,您可以将问题分成两部分:
k
。更大k
- 生成路径会更加广泛。请注意,找到所有可能的路径是非常低效的,因为它们具有阶乘数,并且除了最小的图之外,所有这些数字往往无法计算(对于7,000个节点而言绝对无法实现)