美文网首页
无向图中DFS和BFS的应用

无向图中DFS和BFS的应用

作者: xilovesyu | 来源:发表于2017-11-09 14:42 被阅读0次

DFS和BFS的应用-寻找路径

寻找路径就是记录下DFS和BFS访问过的路径节点然后可以通过这些节点推出路径。可以查看dfs和bfs算法中保留了路径。

DFS和BFS的应用-寻找连通分量及判断两个是否连通

循环所有的节点,从第一个节点做dfs,如果第一个节点做dfs能够到达所有节点,那么就只有一个连通分量。否则,第i个节点没有连通,从第i个节点做dfs寻找这个连通分量。代码如下:

    private int[] ids;//保存每一个点所属的连通分量
    public int ConnectedComponent(){
        int count=0;
        boolean[] marked=new boolean[this.V];
        //从第一个节点开始做dfs,如果第一个节点能够访问全部,那么后面节点就不需要在dfs了
        //如果有的点没有marked到,那么从该点继续做dfs,那么这就是第二个连通分量 count++;
        for(int i=0;i<this.V;i++){
            if(!marked[i]){
                dfs(marked,ids,i,count);
                count++;
            }
        }
        return count;
    }
    public boolean connected(int v,int w){
        return ids[v]==ids[w];
    }
    private void dfs(boolean[] marked,int[] ids,int v,int count){
        marked[v]=true;
        ids[v]=count;
        for(int w:this.adj[v]){
            if(!marked[w]){
                dfs(marked, ids, w, count);
            }
        }
    }

DFS应用-查看是否有环

查找是否有环也是用的DFS,首先从所有的节点出发,关键在于保存上一个节点,如果标记该节点已经被访问但是他的上一级不是前一个节点,那么表明会有另一个节点到达,造成有环的存在

    private boolean hasCycle;
    public boolean hasCycle(){
        boolean[] marked=new boolean[this.V];
        for(int i=0;i<this.V;i++){
            if(!marked[i])
                hasCycle(marked,i,i);
        }
        return hasCycle;
    }
    public void hasCycle(boolean[] marked,int v,int u){
        marked[v]=true;
        for(int w:this.adj[v]){
            if(!marked[w]){
                hasCycle(marked,w,v);
            }else if(w!=u){
                hasCycle=true;
            }
        }
    }

相关文章

  • 无向图中DFS和BFS的应用

    DFS和BFS的应用-寻找路径 寻找路径就是记录下DFS和BFS访问过的路径节点然后可以通过这些节点推出路径。可以...

  • 无向图 图的表示方法:邻接表 dfs和bfs的区别:dfs是用栈,bfs用队列 有向图 有向无环图(DAG): 不...

  • 邻接表|DFS|BFS

    结构定义 创建无向图 输出 DFS BFS

  • 图的桥和割点

    内容概要: 图中的桥 图的DFS遍历树和BFS遍历树及其与寻桥算法的关系 图的割点 DFS和BFS的对比小结 桥(...

  • 无向图DFS和BFS

    基本结构 DFS深度优先遍历 BFS广度优先遍历 符号图

  • 图的相关算法

    深度优先搜索非递归形式 DFS 深度优先搜索非递归形式 广度优先搜索 BFS 判断无向图是否是树 判断有向图中两...

  • 无向图的构建,DFS和BFS

    无向图的构建 我的目标是输入顶点个数以及一系列的边来构建出无向图。表示图的方法有邻接矩阵,邻接表,以及边的列表设计...

  • 用Python实现树的BFS与DFS

    一、BFS与DFS简介 在理解动态规划、BFS和DFS一文中,已经集合具体例子,介绍了图的BFS与DFS。但是比较...

  • BFS

    [TOC] BFS 和 DFS BFS广度有限搜索和DFS深度优先搜索算法是特别常用的两种算法 DFS 算法就是回...

  • Binary Tree(2)

    BFS vs DFS for Binary Tree What are BFS and DFS for Binar...

网友评论

      本文标题:无向图中DFS和BFS的应用

      本文链接:https://www.haomeiwen.com/subject/aqnpmxtx.html