`
128kj
  • 浏览: 584192 次
  • 来自: ...
社区版块
存档分类
最新评论

求一个无向图的最大环的边数(POJ3895) (java解答)

阅读更多
POJ 3895
题意:
   求最大环的边数,给出一个无向图,图中每条边的长度都是1,求图中最长环的长度是多少?

样例:
Sample Input

1 -------->这里是测试次数
7 8 ----------------->七个点,八条边
3 4 ---------------->顶点3到4有一条边
1 4
1 3
7 1
2 7
7 5
5 6
6 2

Sample Output

4

AC代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.List;
public class Main {
	private int n;//顶点个数
          private boolean[] used;//节点状态,值为false的是未访问的   
          private List< ArrayList< Integer>> G;//邻接表
          private int maxlen=0;//最大环的长度
          private int[] num;//记录搜索到某顶点时已搜索过的顶点数
  

        public Main(int n,List< ArrayList< Integer>> G){
             this.n=n;
             this.G=G;
             used=new boolean[n+1];  
             num=new int[n+1];
        }


private void dfs(int v, int t)  {  
   
    num[v] = t;  //搜索到v时,已搜索过的顶点数
    used[v] = true;  
    int x = G.get(v).size();  
    for(int i = 0; i < x; i++){ //对V的每一个邻接点 
        if(!used[G.get(v).get(i)]){ //没有发现环 
            dfs(G.get(v).get(i), t + 1);  
        }  
        else  //发现环,更新最大环的边数
        {  
            if(maxlen < num[v] - num[G.get(v).get(i)] + 1)  
            maxlen = num[v] - num[G.get(v).get(i)] + 1;  
        }  
    }  
  }  
   public void go(){
      for(int i = 1; i <= n; i++){ //遍历每一个顶点
            if(!used[i])  
            dfs(i, 1);  //深度优先搜索
        }  
        if(maxlen > 2) System.out.printf("%d\n", maxlen);  
        else System.out.println("0");  
  }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t=sc.nextInt();
        while(t-->0){
            int n=sc.nextInt();
            int m=sc.nextInt();
             
            List< ArrayList< Integer>> G;
            G = new ArrayList< ArrayList< Integer>>();//初始化邻接表
            for(int i = 1;i<=n+1;i++)
                  G.add(new ArrayList< Integer>());
            for(int i=0;i<m;i++){
              int u = sc.nextInt();
              int v = sc.nextInt();
              G.get(u).add(v);
              G.get(v).add(u);      
             }
              
            Main ma=new Main(n,G);
             ma.go();
          
        }
   }
}

源码:
0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics