Algorithm 在图中找出无用的边

Algorithm 在图中找出无用的边,algorithm,graph,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);

我有一个包含
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++;
               }

        }

}

但它并没有给我正确的答案。这是一个多么正确的方法?

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

您可以使用算法在O(n)中查找每个组件内的所有桥。桥是一条边,删除它会使图形断开连接。
然后,您需要的数字如下:图的边数-网桥数。

“运行DFS并多次计算访问的节点数。”-那么,您为什么这么确定这是正确的解决方案?从单个节点运行dfs/bfs只提供图形的一种表示形式。。。提示:问题要简单得多:连接
n
节点的图形所需的最小边数是多少?这是错误的。考虑一个长度为100的循环。根据OPs的定义,它的所有边都是无用的。你只数其中一个。