图论09-桥和割点

文章目录

  • 1 寻找桥的算法
  • 2 桥的代码实现
  • 3 寻找割点的算法
  • 4 割点的代码实现

1 寻找桥的算法

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

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

2 桥的代码实现

package Chapt06_Bridge;import java.util.ArrayList;public class FindBridges {private Graph G;private boolean[] visited;//ord数组记录访问的顺序private int ord[];//low数组记录该顶点可以访问到的ord[值]最小的[顶点]private int low[];//cnt用来记录步数,给order赋值private int cnt;// Edge类型的动态数组private ArrayList<Edge> res;public FindBridges(Graph G){this.G = G;visited = new boolean[G.V()];res = new ArrayList<>();ord = new int[G.V()];low = new int[G.V()];cnt = 0;for(int v = 0; v < G.V(); v ++)if(!visited[v])dfs(v, v);}private void dfs(int v, int parent){visited[v] = true;ord[v] = cnt;// 初始的时候,low的值就是访问的顺序值,在递归return的时候才进行更新low[v] = ord[v];cnt ++;// 通过邻接表,挨个查找相邻的节点for(int w: G.adj(v))//如果有相邻的节点还没有被访问过,就dfsif(!visited[w]){dfs(w, v);// 对上一个节点的low值进行更新low[v] = Math.min(low[v], low[w]);// 如果子节点的low值比父节点的ord大,说明两点之间是一座桥。// 因为如果都在同一个环内,low值一定是父节点之前的节点,数字会更小,那么就不是桥,桥是不可回头的。if(low[w] > ord[v])res.add(new Edge(v, w));}else if(w != parent) //如果该点访问过,不继续dfs,只更新low值low[v] = Math.min(low[v], low[w]);}public ArrayList<Edge> result(){return res;}public static void main(String[] args){Graph g = new Graph("g2.txt");FindBridges fb = new FindBridges(g);System.out.println("Bridges in g2 : " + fb.result());Graph g2 = new Graph("g8.txt");FindBridges fb2 = new FindBridges(g2);System.out.println("Bridges in g8 : " + fb2.result());Graph g3 = new Graph("g3.txt");FindBridges fb3 = new FindBridges(g3);System.out.println("Bridges in g3 : " + fb3.result());Graph tree = new Graph("tree.txt");FindBridges fb_tree = new FindBridges(tree);System.out.println("Bridges in tree : " + fb_tree.result());}
}

在这里插入图片描述

3 寻找割点的算法

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

4 割点的代码实现

package Chapt06_Bridge_And_CutPoints;import java.util.HashSet;public class FindCutPoints {private Graph G;private boolean[] visited;private int[] ord;private int[] low;private int cnt;private HashSet<Integer> res;public FindCutPoints(Graph G){this.G = G;visited = new boolean[G.V()];res = new HashSet<>();ord = new int[G.V()];low = new int[G.V()];cnt = 0;for(int v = 0; v < G.V(); v ++)if(!visited[v])dfs(v, v);}private void dfs(int v, int parent){visited[v] = true;ord[v] = cnt;low[v] = ord[v];cnt ++;// 记录子节点的数量int child = 0;for(int w: G.adj(v))if(!visited[w]){dfs(w, v);low[v] = Math.min(low[v], low[w]);//割点的判断if(v != parent && low[w] >= ord[v])res.add(v);child ++;if(v == parent && child > 1)res.add(v);// if(v == parent && child = 1) -- 单环肯定不是割点}else if(w != parent)low[v] = Math.min(low[v], low[w]);}public HashSet<Integer> result(){return res;}public static void main(String[] args){Graph g = new Graph("g8.txt");FindCutPoints fc = new FindCutPoints(g);System.out.println("Cut Points in g8 : " + fc.result());Graph g2 = new Graph("g2.txt");FindCutPoints fc2 = new FindCutPoints(g2);System.out.println("Cut Points in g2 : " + fc2.result());Graph tree = new Graph("tree.txt");FindCutPoints fc3 = new FindCutPoints(tree);System.out.println("Cut Points in tree : " + fc3.result());}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能&#xff1a;讲解视频&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…

计蒜客详解合集(2)期

目录 T1126——单词倒排 T1617——地瓜烧 T1612——蒜头君的数字游戏 T1488——旋转单词 T1461——校验信用卡号码 T1437——最大值和次大值 T1126——单词倒排 超级水的一道题&#xff0c;和T1122类似但更简单&#xff0c;分割后逆序输出即可~ 编写程序&#xff0c;读入…

Linux系統下查看处理器信息

在 Linux 系统中&#xff0c;可以使用 lscpu 命令来查看处理器的信息。该命令会显示有关 CPU 架构、核心数、线程数、缓存等级和大小等详细信息。 要使用 lscpu 命令&#xff0c;只需在终端中输入以下命令并按下回车键&#xff1a; lscpu执行后&#xff0c;将显示处理器的相关…

2023最新版本 从零基础入门C++与QT(学习笔记) -2- 命名空间的使用

&#x1f38f;在不同的命名空间变量名可相同 创建(如下方代码块) &#x1f384;分析一下构成 &#x1f388;-1- namespace 关键字命名空间 &#x1f388;-2- wm9 空间名称 &#x1f388;-3-括号里边正常定义变量即可 namespace wm9 {int a 99;char b A;float c 9.99;char…

Harbor(V2.8+) 登录时报错 net/http: TLS handshake timeout

问题描述 最近将harbor从v1.8 升级到v2.8后&#xff0c;客户端在登录时出现了以下问题&#xff1a; net/http: TLS handshake timeout解决方案 由于V2.8版本的nginx代理中只有配置TLSv1.2协议&#xff0c;没有TLSv1.1协议的支持&#xff0c;导致了部分客户端无法的登录。 在…

Django——orm模块创建表关系

django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…

振南技术干货集:研发版本乱到“妈不认”? Git!(1)

注解目录 1、关于 Git 1.1Git 今生 (Git 和 Linux 的生父都是 Linus&#xff0c;振南给你讲讲当初关于 Git 的爱恨情愁&#xff0c;其背后其实是开源与闭源两左阵营的明争暗斗。) 1.2Git的爆发 (Git 超越时代的分布式思想。振南再给你讲讲旧金山三个年轻人创办 GitHub&…

Java设计模式之访问者模式

目录 定义 结构 案例 优点 缺点 使用场景 扩展 分派 案例实现须知 动态分派 静态分派 双分派 定义 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色…

普华永道于进博会首发“企业数据资源会计处理一体化平台”

11月6日&#xff0c;在第六届中国国际进口博览会上&#xff0c;普华永道发布企业数据资源会计处理一体化平台&#xff08;英文名为Data Accounting Platform&#xff0c;简称DAP&#xff09;。该产品以普华永道“五步法”数据资源入表路径为理论依据&#xff0c;依托多年来普华…

C语言编写函数将字符串逆序存放

文章目录 1-12题例题13例题13答案答案一答案二 1-12题 C语言基础例题1-3题-指针篇 C语言基础例题4-5题-二维数组篇 C语言基础例题6-7题-结构体篇 C语言基础例题8-9题-大作业篇 C语言基础例题10-11题-字符串、指针篇 C语言基础例题12题-链表篇 例题13 请编写一个函数 void re…

现在个人想上架微信小游戏已经这么难了吗...

点击上方亿元程序员关注和★星标 引言 大家好&#xff0c;最近我突然想起来我还有一款微信小游戏还没有上架&#xff0c;于是捣鼓了一天把游戏完善了一下&#xff0c;然后准备提交审核&#xff0c;却发现异常的艰难… 1.为什么难&#xff1f; 相信大家都大概知道&#xff0c…

分布式id生成数据库号段算法的golang实现

分布式id生成数据库号段算法的golang实现 介绍项目结构使用说明核心流程说明1. 定义id生成器结构体2. id生成器共有Monitor&#xff0c;GetOne, Close三个对外暴露的方法。3. 数据表结构 参与贡献 介绍 项目地址&#xff1a;gitee&#xff1b;github 本项目主要利用go语言(go1…

解决mac 下 docker-compose 不是命令

docker-compose docker: ‘compose’ is not a docker command #6569 解决方法&#xff1a; mkdir -p /usr/local/lib/docker ln -s /Applications/Docker.app/Contents/Resources/cli-plugins /usr/local/lib/docker/cli-plugins参考&#xff1a; https://github.com/docker/…

Qt中对Udp数据打包发送和接收

有些小伙伴对怎么对Udp的数据打包不太清楚。下面我举例说明。 比如我们要发送一个Person的数据。可以先用一个结构把Person的数据封装。 struct Person {QString name;int age; };下面是udp客户端和服务器端完整的代码例子。 #ifndef UDPCLIENT_H #define UDPCLIENT_H#includ…

【EI会议征稿】JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

JPCS独立出版-第五届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2024&#xff09; 2024 5th International Conference on Advanced Material and Clean Energy 第五届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2024&#xff09;将于2024年2月23-25日在中国▪长沙…

lenovo联想小新 Air-14 2019 AMD平台API版(81NJ)原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1HCC66EH4UOcgofRx5_v1oA?pwdlgqw 提取码&#xff1a;lgqw 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xf…

KafkaConsumer 消费逻辑

版本&#xff1a;kafka-clients-2.0.1.jar 之前想写个插件修改 kafkaConsumer 消费者的逻辑&#xff0c;根据 header 过滤一些消息。于是需要了解一下 kafkaConsumer 具体是如何拉取消费消息的&#xff0c;确认在消费之前过滤掉消息是否会有影响。 下面是相关的源码&#xff0…

GZ038 物联网应用开发赛题第1套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第1套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评人员反映,不得扰乱赛场秩序; 3、遵守赛场纪律,尊重考评人员…

【漏洞复现】BYTEVALUE智能流控路由器存在命令执行

【漏洞介绍】 百为智能流控路由器 /goform/webRead/open 路由的 ?path 参数存在有回显的命令注入漏洞。攻击者可通过该漏洞在服务器端执行命令&#xff0c;写入后门&#xff0c;获取服务器权限&#xff0c;从而获取路由器权限。 【指纹】 title”BYTEVALUE 智能流控路由器”…

151. 反转字符串中的单词

151. 反转字符串中的单词 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 151. 反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string/description/ 完成情况&#xff1a; 解…