【发布时间】:2012-03-23 02:48:46
【问题描述】:
假设图中有 3 个目标节点。
顶点不相交路径意味着在路径中除了末端节点之外没有任何相同的节点。
对于任何一个节点,比如节点 i,如何找到从节点 i 到三个目标节点的所有顶点不相交路径?
【问题讨论】:
-
要清楚,你的意思是一条路径从
i开始,经过三个目标节点中的每一个,然后返回i,除了两端相同之外没有重复?另外,您想找到所有此类路径(如您所说)还是最短的此类路径(如已标记)? -
在我的目的中,我想找到一条从节点 i 开始并在目标节点结束的路径,比如节点 z。如果有多个路径,则这些路径中不应有相同的节点,但节点 i 和节点 z 除外。我希望找到从 i 到 z 的所有这些路径。
-
哦,这与我(和 templatetypedef)所理解的非常不同。所以你想找到一组从
i到z的路径,这样这些路径是不相交的?可能有很多这样的集合(取决于您选择的可能路径)。所以也许你想要做的是找到从i到z的所有路径(例如通过广度优先搜索),然后处理它们以找到一个不相交的集合。一种简单的方法,它不会找到最大的这样的集合或任何东西:从集合中选择一条路径,删除与该路径相交的所有其他路径,重复。 -
当然,你可以结合我刚才描述的那个算法的两个步骤。也许做深度优先搜索,然后一旦你找到了一个有效的路径,从图中删除它的所有节点并继续你的搜索。但是,如果您指定需要一组特殊的不相交路径到目标,那么肯定有更好的方法。 (我仍然不知道有 3 个目标节点是什么意思,虽然......只是这样做 3 次,或者找到从
i到x、y和z的路径,这样 @ 987654331@、i->y和i->z不相交?) -
@Dougal,非常感谢。是的,您的深度优先然后删除它们的想法可能可以解决这个问题。而大约 3 个目标节点在算法上其实并没有太多的业务。节点 x 和 y 与 z 相同,所以它只会重复寻找到 z 的路径的过程。
标签: algorithm matlab graph-theory shortest-path