在图表

时间:2017-01-12 16:09:56

标签: algorithm graph

我有一个连接在一起的N个组件的图表,我必须找到无用的边数。
如果我们删除该边缘,则说边缘是无用的,整个图形仍然连接 我的方法
运行DFS并多次计算访问节点的数量。

public static void search_me(int  i , int pa){

        V[i]=true;
        for(int j:maps[i]){


               if(!V[j]){
                 search_me(j,i);

               }else if(pa!=j){ 
                   useless++;
               }

        }

}

但它没有给我正确答案。什么是正确的做法?

2 个答案:

答案 0 :(得分:2)

您可以使用Tarjan's算法查找O(n)中每个组件中的所有网桥。 Bridge是一个边缘,它的删除使图形断开连接。 然后你想要的数字将是:图的边数 - 桥的数量。

答案 1 :(得分:-1)

如果图表最初是连接的,它会产生一个生成树,它具有正好n-1个边,其中n是顶点数;讨论了这种现象here。因此,如果初始图形具有m条边,则无用边的数量为m - ( n - 1 ) = m - n + 1,可以在没有图算法的情况下直接确定。