有向图问题2----可达性问题和强连通分量问题(Kosaraju算法)

本文探讨了有向图的可达性问题,包括单点可达性、多点可达性和顶点对之间的可达性,以及如何使用深度优先遍历解决这些问题。接着,文章深入讲解了强连通分量的概念,并介绍了Kosaraju算法的思想和实现,用于找出有向图的强连通分量。算法虽然简洁,但理解起来具有一定挑战性。
摘要由CSDN通过智能技术生成

可达性问题

  • 单点可达性:回答“是否存在一条从起点s到给定节点v的有向路径?”等类似问题。
  • 多点可达性:回答“是否存在一条从集合中任意顶点到给定节点v的有向路径?”等类似问题。
  • 顶点对的可达性:回答“是否存在一条从一个给定节点v到给定节点w的有向路径?”等类似问题。

单点可达性和多点可达性:

使用深度优先遍历很容易实现。

算法实现:

public class DirectedDFS{
    private boolean[] marked;
    //单点可达性
    public DirectedDFS(Digraph G,int s){
        mark = new boolean[G.V()];
        dfs(G,s);
    }
    //多点可达性
    public DirectedDFS(Digraph G, Iterable<Integer> sources){
        mark = new boolean[G.V()];
        for(int s : sources)
            if(!marked[s]) dfs(G,s); 
    }
    //深度优先遍历算法
    private void dfs(Graph G,int v) {
        marked[v] = true;
        for(int w: G.adj(v))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值