删除边以消除两个节点之间除一条无循环路径之外的所有路径

时间:2017-07-16 17:08:26

标签: algorithm graph graph-algorithm

我有一个连接的无向图,其中包含 n 个节点。给定两个节点,我想找到必须删除的最小边数,以确保这两个节点之间只有一条无循环路径。

例如,如果这是图表:

1------------2------------5
|                         | 
|                         | 
3-------------------------4

然后给出节点15,答案将是 1 :只删除(例如)节点3和节点4之间的边缘。

对于边缘集的每个子集,蛮力方法是尝试去除那些边缘并测试两个感兴趣节点之间是否存在唯一的无循环路径。

有更有效的方法吗? (我用Google搜索,但没有发现任何相关内容。)

(亲爱的cryptomanic,我添加了这些例子来帮助讨论确切的要求;请编辑这部分,并指出哪些解决方案是有效的.m69)

输入图:(从X到Y)

          O---O---O---O       O
         /     \ /     \     / \
O---O---X       O       Y---O---O
         \             /
          O---O---O---O
             / \       \
            O---O       O

解决方案A :( X和Y之间没有循环)

          O---O---O---O       O
         /       /     \     / \
O---O---X       O       Y---O---O
                       /
          O---O---O---O
             / \       \
            O---O       O

解决方案B :( X和Y之间没有旁路)

          O---O---O---O       O
         /             \     / \
O---O---X       O       Y---O---O
                       /
          O---O---O---O
             / \       \
            O---O       O

解决方案C :(没有连接到X和Y的循环)

          O---O---O---O       O
         /       /     \       \
O---O---X       O       Y---O---O
                       /
          O---O---O   O
             / \       \
            O---O       O

解决方案D :(完全隔离从X到Y的路径)

          O---O---O---O       O
         /             \     / \
O---O   X       O       Y   O---O

          O---O---O---O
             / \       \
            O---O       O

解决方案E :( P只能使用一次,因此P-Q-R-P不是替代路径的一部分)

          O---O---O---O       O
               \ /           / \
O---O---X       O       Y   O---O
         \             /
          O---P---O---O
             / \       \
            Q---R       O

解决方案F:

          O---O---O---O       O
               \ /     \     / \
O---O---X       O       Y---O---O
         \             /
          O---O---O---O
             / \       \
            O---O       O

0 个答案:

没有答案