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

深度优先搜索输出有向图中的所有环(JAVA)

    博客分类:
阅读更多
如图:求出有向图的所有环。


import java.util.ArrayList;
import java.util.Arrays;
public class TestCycle {
     private int n;
     private int[] visited;//节点状态,值为0的是未访问的
     private int[][] e;//有向图的邻接矩阵
     private ArrayList<Integer> trace=new ArrayList<Integer>();//从出发节点到当前节点的轨迹
     private boolean hasCycle=false;

     public TestCycle(int n,int[][] e){
         this.n=n;
         visited=new int[n];
         Arrays.fill(visited,0);
         this.e=e;
     }
    
     void findCycle(int v)   //递归DFS
    {
        if(visited[v]==1)
        {
            int j;
            if((j=trace.indexOf(v))!=-1)
            {
                hasCycle=true;
                System.out.print("Cycle:");
                while(j<trace.size())
                {
                    System.out.print(trace.get(j)+" ");
                    j++;
                }
                System.out.print("\n");
                return;
            }
            return;
        }
        visited[v]=1;
        trace.add(v);
        
        for(int i=0;i<n;i++)
        {
            if(e[v][i]==1)
                findCycle(i);
        }
        trace.remove(trace.size()-1);
    }
  
  public boolean getHasCycle(){
      return hasCycle;
  }

   public static void main(String[] args) {
        int n=7;
        int[][] e={
                    {0,1,1,0,0,0,0},
                    {0,0,0,1,0,0,0},
                    {0,0,0,0,0,1,0},
                    {0,0,0,0,1,0,0},
                    {0,0,1,0,0,0,0},
                    {0,0,0,0,1,0,1},
                    {1,0,1,0,0,0,0}};//有向图的邻接矩阵,值大家任意改.
        TestCycle tc=new TestCycle(n,e);
        tc.findCycle(1);
        if(!tc.hasCycle) 
            System.out.println("No Cycle.");
    }
}



运行:
C:\java>java   TestCycle
Cycle:4 2 5
Cycle:1 3 4 2 5 6 0
Cycle:2 5 6 0
Cycle:2 5 6

源码:
  • 大小: 4.4 KB
分享到:
评论

相关推荐

    图的遍历(有向图和无向图)

    无向图和有向图的深度优先和宽度优先遍历(包括递归和非递归两种方式)。

    数据结构-图的应用(邻接矩阵、邻接多重表)

    判断图中是否存在环,无向图5分,有向图10分 给出顶点u和v,判断u到v是否存在路径(5分) 10、求顶点u到v的一条简单路径(10分) 11、求顶点u到v的所有简单路径(15分) 12、求顶点u到v的最短路径(10分) 13、求...

    算法-第4版-完整版

    4.4.5 无环加权有向图中的最短路径算法 425 4.4.6 一般加权有向图中的最短路径问题 433 4.4.7 展望 445 第5章 字符串 451 5.1 字符串排序 455 5.1.1 键索引计数法 455 5.1.2 低位优先的字符串...

    算法 第4版-谢路云译-带完整书签

    4.4.5 无环加权有向图中的最短路径算法 425 4.4.6 一般加权有向图中的最短路径问题 433 4.4.7 展望 445 第5章 字符串 451 5.1 字符串排序 455 5.1.1 键索引计数法 455 5.1.2 低位优先的字符串排序 458 ...

    《算法》中文版,Robert Sedgewick,塞奇威克

    4.4.5 无环加权有向图中的最短路径算法 4.4.6 一般加权有向图中的最短路径问题 4.4.7 展望 第5章 字符串 5.1 字符串排序 5.1.1 键索引计数法 5.1.2 低位优先的字符串排序 5.1.3 高位优先的字符串排序 5.1.4...

    算法 第4版 高清中文版

    4.4.5 无环加权有向图中的最短路径算法 425 4.4.6 一般加权有向图中的最短路径问题 433 4.4.7 展望 445 第5章 字符串 451 5.1 字符串排序 455 5.1.1 键索引计数法 455 5.1.2 低位优先的字符串排序 458 5.1.3 ...

    算法,4th,塞奇威克 (Robert Sedgewick)韦恩 (Kevin Wayne), 谢路云 译.azw3

    4.4.5 无环加权有向图中的最短路径算法 4.4.6 一般加权有向图中的最短路径问题 4.4.7 展望 第5章 字符串 5.1 字符串排序 5.1.1 键索引计数法 5.1.2 低位优先的字符串排序 5.1.3 高位优先的字符串排序 5.1.4 ...

    数据结构与算法分析_Java_语言描述

    9.5.2 Kruskal算法 9.6 深度优先搜索的应用 9.6.1 无向图 9.6.2 双连通性 9.6.3 欧拉回路 9.6.4 有向图 9.6.5 查找强分支 9.7 NP完全性介绍 9.7.1 难与易 9.7.2 NP类 9.7.3 NP完全问题 小结 ...

    高效算法:竞赛、应试与提高必修128例.[法] Christoph Dürr Jill-Jênn Vie(带书签文字版).pdf

    8 7 2 有向无环图 104 8 7 3 最长路径 104 8 7 4 树中的最长路径 104 8 7 5 最小化弧上权重的路径 105 8 7 6 顶点有权重的图 105 8 7 7 令顶点上最大权重最小的路径 105 8 7 8 所有边都属于一条最短路径 105 第 9 章...

    数据结构与算法.xmind

    有向图 无向图 表示方法 邻接矩阵 邻接表 遍历 深度优先搜索 广度优先搜索 哈希表 哈希函数 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 随机数法 处理...

    数据挖掘18大算法实现以及其他相关经典DM算法

    弥补了朴素贝叶斯算法中必须要事件独立性的缺点,利用了贝叶斯网络的DAG有向无环图,允许各个事件保留一定的依赖关系,网络结构中的每个节点代表一种属性,边代表相应的条件概率值,通过计算从而能得到精准的分类...

Global site tag (gtag.js) - Google Analytics