zoukankan      html  css  js  c++  java
  • 有向图是否存在环

    //根据深度优先搜索策略判断一个有向图是否存在环
    public class FindCircle {
    
        private boolean[] visited;//访问标记数组
        private LinkStack S=new LinkStack();//按深度优先遍历访问的先后顺序记录在一个连通分支中的顶点元素
        private boolean find = false;
        
        public void findCircle(ALGraph G) throws Exception
        {
            visited = new boolean[G.getVexNum()];
            for(int v=0;v<G.getVexNum();v++)
                visited[v]=false;
            for(int v=0;v<G.getVexNum();v++)
            {
                if(!visited[v])
                    find_DFS(G,v);
            }
            if(find)
                System.out.println("此有向图有环");
            else
                System.out.println("此有向图无环");
                
        }
    
        private void find_DFS(ALGraph G, int v) throws Exception {
    
            if(!find)
                visited[v]=true;
            S.push(v);
            for(int w=G.firstAdjVex(v);w>=0;w=G.nextAdjVex(v, w))
            {
                if(visited[w]&& isDuplicate(w))
                    find=true;
                else
                    find_DFS(G,w);
            }
            
        }
    
        //判断栈S内是否存在值为w的元素,同时不改变原来的栈中的元素顺序。
        private boolean isDuplicate(int w) {
            LinkStack S1=new LinkStack();//辅助栈
            while(!S.isEmpty() && !((Integer)S.peek()).equals(w))
            {
                S1.push(S.pop());
            }
            if(S.isEmpty())
            {
                //S为空的时候,说明在while循环中,S中的所有的元素都pop出来,放在S1栈内,即没有和w相同的元素
                S.push(S1.pop());
                return false;
            }
            else
                return true;
        }
    }
  • 相关阅读:
    音乐小转盘 css3 动画
    1.41
    1.4
    1.1
    课程设计——输出到TXT
    课程设计——c++中读取txt文件
    大二第一学期期末课程设计 2015.12.28
    无向图的广度优先遍历
    JS基本概念
    继承
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3560948.html
Copyright © 2011-2022 走看看