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

求一个无向图的最大环的边数(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
分享到:
评论

相关推荐

    POJ 1751 求最小生成树prim算法(JAVA)

    标题 "POJ 1751 求最小生成树Prim算法(JAVA)" 提到的是一个编程挑战,涉及图论中的经典算法——Prim算法。在计算机科学中,Prim算法是用于寻找加权无向图的最小生成树的一种有效方法。最小生成树是一棵树形结构,...

    POJ.rar_poj java_poj1048

    【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...

    poj1001java biginteger

    用java的biginteger实现的poj1001,比较简单的方法

    无向图的割点(POJ 2117)

    这道题的目的是求如去除某个点,能把图分成多少个子图,求这样子图的最大数。 其实就是求割点,然后看每个割点能把图分成多少个子图,当然原图不一定是连通的。 割点的求法各个书籍上都有,其实就是用DFS进行遍历。

    凸包练习: POJ 2187(JAVA)

    【标题】"凸包练习: POJ 2187(JAVA)" 是一个关于编程算法的挑战,主要涉及计算机科学中的几何算法。在本问题中,我们关注的是二维平面上的点集及其凸包(Convex Hull)的概念。凸包可以被理解为一个最小的多边形,该...

    北大poj JAVA源码

    总的来说,【北大POJ JAVA源码】是一个宝贵的教育资源,它不仅可以帮助初学者掌握基础的编程技能和算法知识,还能为有经验的程序员提供深入理解和实践算法的机会。通过学习和研究这些源码,你将能够更好地应对各种...

    poj部分源码--Java

    poj平台有关数据结构题的Java源码 1159 1276 2406 2502 2509 2513 2533 2778 3176

    POJ 1300 Door Man:无向图、欧拉定理、gets、sscanf

    - **欧拉回路**:如果一个连通的无向图中每个顶点的度数都是偶数,则该图存在至少一条经过每条边恰好一次的回路,这样的回路称为欧拉回路。 - **欧拉路径**:如果一个连通的无向图恰好有两个顶点的度数为奇数,其余...

    树状数组练习:POJ 2481(JAVA)

    POJ(Programming Online Judge)是一个在线编程评测系统,它提供了许多编程题目供参赛者练习和提交代码。 【描述】虽然描述部分为空,但我们可以推测,作者在博客中可能详细解释了树状数组的概念、特性以及其在...

    POJ2002-Squares

    【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...

    图的深搜+树状数组练习 POJ 3321(JAVA)

    标题中的“图的深搜+树状数组练习 POJ 3321(JAVA)”指的是一个编程题目,其中涉及到图的深度优先搜索(DFS, Depth First Search)算法和树状数组(也称为线段树,Segment Tree)的数据结构。这个题目来源于POJ...

    poj1276解答和分析

    【标题】"poj1276解答和分析"是一个关于解决特定编程问题的资源集合,其中包含了作者对于这个问题的理解、解析以及相应的源代码。在编程竞赛或算法学习中,POJ(Problem On The Internet)是流行的一个在线判题系统...

    POJ1503解答,正确答案(已通过POJ)

    POJ1503解答 POJ1503解答,正确答案(已通过POJ)

    缙云烧饼 poj openjudge Java

    根据给定的信息,本文将对“缙云烧饼 poj openjudge Java”这一题目进行详细的解析,包括题目背景、代码逻辑解读、算法思路分析等方面。 ### 题目背景 题目来源于POJ(Peking University Online Judge)平台上的一...

    字典树练习 POJ 1056

    标题中的“字典树练习 POJ 1056”是指一个编程问题,源自编程竞赛网站POJ(Programming Online Judge)的题目1056。POJ是一个在线平台,程序员可以在这里提交代码并测试其正确性,以解决给定的问题。这类问题通常...

    北大POJ初级-图算法

    3. **Dijkstra算法**:这是解决单源最短路径问题的经典算法,适用于有向图或无向图,但边的权重必须非负。Dijkstra算法通过维护一个优先队列,逐步找到从源节点到其他所有节点的最短路径。 4. **Floyd-Warshall算法...

    poj 130题 acm pku

    在POJ中,每道题目都有一个唯一的三位或四位数字的编号,例如1000、1001等,参赛者可以通过这些编号找到对应的题目进行解答。这里的数字序列可能意味着要讨论或者解析的特定题目集合,这些题目可能涵盖了不同的难度...

    POJ 2255 java

    1、前序遍历的第一个字母必是 根 2、在中序遍历的字母串中找出 根字母,那么根字母左右两边的字符串就分别是它的左、右子树 3、利用递归复原二叉树(把子树看作新的二叉树) 4、后序遍历特征:后序遍历字母串 自右至...

Global site tag (gtag.js) - Google Analytics