当前位置: 首页 > news >正文

图论17-有向图的强联通分量-Kosaraju算法

文章目录

  • 1 概念
  • 2 Kosaraju算法
    • 2.1 在图类中设计反图
    • 2.2 强连通分量的判断和普通联通分量的区别
    • 2.3 代码实现

1 概念

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2 Kosaraju算法

对原图的反图进行DFS的后序遍历。
在这里插入图片描述
在这里插入图片描述

2.1 在图类中设计反图

// 重写图的构造函数public Graph(TreeSet<Integer>[] adj, boolean directed){this.adj = adj;this.directed = directed;this.V = adj.length;this.E = 0;indegrees = new int[V];outdegrees = new int[V];for(int v = 0; v < V; v ++)for(int w: adj[v]){outdegrees[v] ++;indegrees[w] ++;this.E ++;}if(!directed) this.E /= 2;}// 求反图,并且new一个图对象,参数为TreeSetpublic Graph reverseGraph(){TreeSet<Integer>[] rAdj = new TreeSet[V];for(int i = 0; i < V; i ++)rAdj[i] = new TreeSet<Integer>();for(int v = 0; v < V; v ++)for(int w : adj(v))rAdj[w].add(v);return new Graph(rAdj, directed);}

2.2 强连通分量的判断和普通联通分量的区别

强联通分量是环,意味着在DFS过程中一定是公用相同的联通分量序号。

当这个环遍历从环尾开始返回并记录ccid的时候,DFS自由返回到环, 索引指向下一个未被访问过的环外的节点,此时联通分量序号+1。 由于图是反过来的。

单步调试一下更容易理解。

在这里插入图片描述

2.3 代码实现

顶点:注意这里遍历的顺序是反过来的图。

并且,对翻转过来的图进行DFS后序遍历

        GraphDFS dfs = new GraphDFS(G.reverseGraph());ArrayList<Integer> order = new ArrayList<>();for(int v: dfs.post())order.add(v);Collections.reverse(order);for(int v: order) //注意这里遍历的顺序是反过来的图if(visited[v] == -1){dfs(v, scccount);scccount ++;}

但是在DFS的时候,判断邻边用的是原来的邻接列表。

    private void dfs(int v, int sccid){visited[v] = sccid;for(int w: G.adj(v))if(visited[w] == -1)dfs(w, sccid);}

相关文章:

图论17-有向图的强联通分量-Kosaraju算法

文章目录 1 概念2 Kosaraju算法2.1 在图类中设计反图2.2 强连通分量的判断和普通联通分量的区别2.3 代码实现 1 概念 2 Kosaraju算法 对原图的反图进行DFS的后序遍历。 2.1 在图类中设计反图 // 重写图的构造函数public Graph(TreeSet<Integer>[] adj, boolean dire…...

ubuntu中使用 vscode 连接docker开发环境

文章目录 ubuntu中使用 vscode 连接docker开发环境步骤一&#xff1a;安装 Remote Development 插件步骤二&#xff1a;连接远程环境步骤三&#xff1a;开发 问题解决参考连接 ubuntu中使用 vscode 连接docker开发环境 Remote Development 是一个 Visual Studio Code 插件&…...

【广州华锐视点】海外制片人VR虚拟情景教学带来全新的学习体验

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种利用电脑模拟产生一个三维的虚拟世界&#xff0c;提供用户关于视觉、听觉、触觉等感官的模拟体验的技术。随着科技的进步&#xff0c;VR已经被广泛应用到许多领域&#xff0c;包括游戏、教育、医疗、房…...

龙芯loongarch64麒麟服务器配置yum源

服务器信息&#xff1a; uname -a # 命令 Linux bogon 4.19.90-52.22.v2207.a.ky10.loongarch64 #1 SMP Tue Mar 14 11:18:26 CST 2023 loongarch64 loongarch64 loongarch64 GNU/Linux yum源配置&#xff1a; cd /etc/yum.repos.d/ vim kylin_loongarch64.repo 将下面内容拷贝…...

Centos7 单用户模式修改密码 3步搞定 666 (百分比成功)

1.第一步重新服务器 2.进入这个页面按e进入单用户模式 3.找到linux16这行 在后面添加 init/bin/bash 按ctrlx进入 4.注意是事项直接修改是报错passud: Authentication token manipulation error 需要执行权限&#xff1a;mount -o remount,rw /...

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …...

Java主流分布式解决方案多场景设计与实战

Java的主流分布式解决方案的设计和实战涉及到多个场景&#xff0c;包括但不限于以下几点&#xff1a; 分布式缓存&#xff1a;在Java的分布式系统中&#xff0c;缓存是非常重要的一部分。常用的分布式缓存技术包括Redis、EhCache等。这些缓存技术可以用来提高系统的性能和响应…...

docker安装MongoDB数据库,并且进行密码配置

很美的一首小诗> 我在外面流浪&#xff0c;回来时 故乡瘦了一圈—— 墩子叔走了&#xff0c;门前的池水 干了一半。 屋后驼背的柳树 头发散落了一地&#xff0c; 老房子蹲在坟边&#xff0c;屋顶的白云 仍在风中奔跑。 安装配置 要在Docker中安装MongoDB并启用远程连接&…...

ssh脚本找不到命令或者执行无效的解决办法

如图&#xff1a;今天在编写脚本时发现的这个问题&#xff0c; 在排除脚本语法错误、编码格式等情况下&#xff0c;仍然出现“bash 。。未找到命令”的字样 解决办法&#xff1a; 给每台虚拟机的环境变量source一下&#xff1a; 命令如下 source /etc/profile或者输入 vim ~…...

2023年11月18日(星期六)骑行海囗林场公园

2023年11月18日 (星期六) 骑行海囗林场公园(赏枫树林&#xff09;&#xff0c;早8:30到9:00&#xff0c; 大观公园门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门口集合 &#xff0c;家住东&#x…...

xss 漏洞

1、XSS类型 XSS攻击大致上分为3类&#xff1a; 反射型xss&#xff0c;DOM型xss&#xff0c;存储型xss。前两类为非持久性xss&#xff0c;后者为持久型xss。 1.1 非持久型xss&#xff1a; 1&#xff09;反射型 XSS 攻击相对于访问者而言是一次性的&#xff0c;具体表现在恶意…...

一文图解爬虫_姊妹篇(spider)

—引导语 爬虫&#xff0c;没有一个时代比当前更重视它。一个好的爬虫似乎可以洞穿整个互联网&#xff0c;“来装满自己的胃”。 接上一篇&#xff1a;一文图解爬虫&#xff08;spider&#xff09; 博主已初步对爬虫的“五脏六腑”进行了解剖。虽然俗称“爬虫”&#xff0c;但窃…...

【vue实战项目】通用管理系统:api封装、404页

前言 本文为博主的vue实战小项目系列中的第三篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装to…...

R语言编写代码示例

R语言编写的爬虫程序&#xff0c;使用了requests库来发送请求&#xff0c;使用BeautifulSoup库来解析HTML。 r # 第一步&#xff0c;安装必要的库 install.packages("xml2") install.packages("requests") install.packages("httr") install.pac…...

[RK3568][Android12.0]--- 系统自带预置第三方APK方法

Platform: RK3568 OS: Android 12.0 Kernel: 4.19 Rockchip默认提供了机制来预置第三方APK, 方法很简单&#xff1a; 1. 在device/rockchip/rk3568创建preinstall目录(如果要可卸载&#xff0c;那就创建preinstall_del目录) 2. 将你要预安装的APK放进此目录即可 preinstall 不…...

数据分析场景下,企业如何做好大模型选型和落地?

在数据驱动的数字化时代&#xff0c;有效的数据分析已成为企业成功的关键因素。而随着大模型带来能力突破&#xff0c;让AI与数据分析相互结合&#xff0c;使分析结果更好支撑业务&#xff0c;促进企业内部数据价值释放&#xff0c;成为了当下企业用户尤为关注的话题。 如何按照…...

使用VScode编译betaflight固件--基于windows平台

使用VScode编译betaflight固件--基于windows平台 1、使用git克隆betaflight的开源代码2、betaflight的代码框架分析&#xff1a;3、配置编译环境&#xff1a;4、VScode上编译 betaflight不仅可以在LInux上进行编译也可以在Windows上编译&#xff0c;本文主要介绍在windows平台上…...

OkHttp网络请求读写超时

查看OkHttp的源码&#xff1a; OkHttpClient 的 Builder() public Builder() {...callTimeout 0;connectTimeout 10_000;readTimeout 10_000;writeTimeout 10_000;... } callTimeout&#xff1a;整个请求的超时时间&#xff0c;如果设置了这个值&#xff0c;则总超时时间…...

@postmapping 定义formdata传参方式

背景&#xff1a;feign声明接口&#xff0c;传对象&#xff0c; 但是对象那边没有用requestBody接收&#xff1b; 前端调它也是走的formdata&#xff0c;所以不改变源代码&#xff0c;以及补新接口的情况下&#xff0c;我也需要formdata传参&#xff1b; 不然数据传不过去会为空…...

Windows客户端开发框架WPF简介

一、WPF简介 WPF的全称是Windows Presentation Foundation&#xff0c;WPF是 Microsoft 提供的一种用于构建桌面应用程序的 UI 框架。它包含在 .NET Framework 中&#xff0c;从 .NET 3.0 版本开始就被引入。 以下是一些关于 WPF 的关键特性&#xff1a; 1. XAML&#xff1a…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...

记一次spark在docker本地启动报错

1&#xff0c;背景 在docker中部署spark服务和调用spark服务的微服务&#xff0c;微服务之间通过fegin调用 2&#xff0c;问题&#xff0c;docker容器中服务器来后&#xff0c;注册中心都有&#xff0c;调用服务也正常&#xff0c;但是调用spark启动任务后报错&#xff0c;报错…...

在MobaXterm 打开图形工具firefox

目录 1.安装 X 服务器软件 2.服务器端配置 3.客户端配置 4.安装并打开 Firefox 1.安装 X 服务器软件 Centos系统 # CentOS/RHEL 7 及之前&#xff08;YUM&#xff09; sudo yum install xorg-x11-server-Xorg xorg-x11-xinit xorg-x11-utils mesa-libEGL mesa-libGL mesa-…...

组合模式:构建树形结构的艺术

引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...