如何求有向图两点间的所有路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何求有向图两点间的所有路径相关的知识,希望对你有一定的参考价值。
参考技术A 这个算法的效率应该是理论上最好的了,因为要求出两点间所有的路径,必须考察每种可能(否则的话信息量不够),所以这个回溯法是唯一的方法。至于运算的速度,取决于你的图的规模和顶点的数目,这个算法的复杂度是O(VE)。内存耗光的问题一般不会出现,我试过用这个计算5000个节点的随机地图,速度还是蛮快的,一下子就出解了。该算法很简单,基本思想就是回溯。本回答被提问者采纳最小生成树应用
1.求类似最小距离最大值/最大距离最小值问题,通过最小/大生成树固定一个条件,另一个条件在树里找到。
例题:货车运输。
求两点间的一条路径,使得最小边权最大。先通过最大生成树确定最大,再从两点间的边里选择最小的边权,用到了lca。
例题:Star Way to Heaven
求路径到一些星星的最小距离的最大值。这个跟上边的不同点是用的是最小生成树,用prim算法找到所有星星以及边界的最小生成树,最大两边界之间的边权的最大值就是答案。
但我们关注的是为什么最小生成树可以接受。因为这两道题虽然题面大体相同,但是这道题更难一些,它需要用一张新图(本来也没有图啊
我们要从左走到右边,那么就要穿过一些星星间相连的边,那么我们可以考虑,如果让答案更优,那么穿过的一定是在相同条件下的边权(也就是距离)更大的边。而且我们可能要穿过很多条边,
题意告诉我们要取这些边边权的最小值,因此题意就转化为要找到一条最大路径的最小边权,就是最小生成树了,是不是很神奇!(我问逼哥,Duanyue,zkq了很久才会的,感谢他们)
2.最小瓶颈树。也就是说最小生成树里最大边的权值最小,可证。
用反证法,首先假设最小生成树为T1,最大边为E1,另外一棵最大边更小的生成树为T2,最大边为E2。
如果E2 < E1,则T2中所有的边权值均小于E1,E1在T1中连接两个连通分量A,B,在T2中一定有连接A,B两个连通分量的边(否则整个树就不联通了),这些边都小于E1,用他们替换E1,则T1的总权值更小,与 T1是最小生成树矛盾。
因此最小生成树的最大边的权值就是所有生成树最大边权值的最小值。
证明来自「qq_21704477」的原创文章。
3 模板
以上是关于如何求有向图两点间的所有路径的主要内容,如果未能解决你的问题,请参考以下文章