【数据结构】图的连通分量
什么是连通分量
如图,在上面的图中有12个点,他们连接构成了三个部分。{0,1,2,6,3,4,5},{7,8},{9,10,11,12}这三个部分就是这个图的连通分量。
如何计算联通分量
使用dfs可以遍历一个点所在连通分量中所有的点。在每次遍历时,我们可以对一个连通分量中的点进行标记、染色。
例如:
首先,声明一个变量count用于统计,以及标记数组color[]。然后,从0开始遍历,我们会遍历完{0,1,2,6,3,4,5}连通分量,遍历过程中我们使用点的值作为索引为color[点]赋值为count。最后完成一个连通分量的遍历时 ,count++。
代码
用例: 点的个数+邻接矩阵
12
0 1 1 0 0 1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 1 0 1 1 0 0 0 0 0 0
1 0 0 1 1 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 1
0 0 0 0 0 0 0 0 0 1 0 1 0
结果:
3
import java.util.Arrays;
import java.util.Scanner;
public class Main {private static int color[], map[][];private static Scanner in = new Scanner(System.in);private static int N, count;public static void main(String[] args) {N = in.nextInt();map = new int[N + 1][N + 1];color = new int[N + 1];Arrays.fill(color, -1);for (int i = 0; i <= N; i++) {for (int j = 0; j <= N; j++)map[i][j] = in.nextInt();}CC();System.out.println(count);}public static void CC() {for (int i = 0; i <= N; i++) {if (color[i] == -1) {dfs(i);count++;}}}private static void dfs(int i) {color[i] = count;for (int k = 0; k < map[i].length; k++)if (color[k] == -1 && map[i][k] == 1) dfs(k);}
}
【数据结构】图的连通分量相关推荐
- 数据结构--图(Graph)详解(三)
数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...
- 数据结构--图(Graph)详解(一)
数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...
- 【数据结构(C语言)】数据结构-图
图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...
- 数据结构——图(存储结构)
数据结构--图 图的定义和基本术语 图的类型定义 图的存储结构 数组(邻接矩阵表示法) 网(即有权图)的邻接矩阵表示法 邻接表 邻接表表示法(链式) 图的邻接表存储表示 采用邻接表表示法创建无向网 邻 ...
- 数据结构——图的定义和实现
这里写目录标题 图的定义 各种图的定义 无向边 有向边 图的顶点与边的关系 连通图生成树 图的各种实现 在引入邻接矩阵之前先介绍一下图的相关概念(概念比前树啥的面稍微复杂一点) 图的定义 之前学了线性 ...
- 数据结构—图(Part Ⅱ)—最小生成树 最短路径
目录 最小生成树 普里姆(Prim)算法 算法实现 运行结果 程序分析 克鲁斯卡尔(Kruskal)算法 算法实现 运行结果 程序分析 最短路径 广度优先搜索(BFS)算法 算法实现 运行结果 程序分 ...
- 数据结构——图结构:图
数据结构与算法分析--目录 第一部分:数据结构 数据结构--图结构:图 图基础 \quad 图是一种比线性表和数更为复杂的数据结构.在图结构中,结点之间的关系可以是任意的,也就是说,图中的任意两个数据 ...
- 数据结构——图——克鲁斯卡尔(Kruskal)算法
数据结构--图--克鲁斯卡尔(Kruskal)算法 同样的思路,我们也可以直接就以边为目标去构建,因为权值是在边上,直接去找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环路而 ...
- 数据结构--图(Graph)详解(四)
数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...
最新文章
- PHP CodeBase: 将时间显示为“刚刚”“n分钟/小时前”等
- oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
- Java开发:什么是序列化?
- C++ 实现无向图的最小生成树Kruskal算法(完整代码)
- CodeForces - 1144F搜索+简单图论
- spring集合的注入
- windows获取主板序列号和盘符号_【装机帮扶站】第342期:甭管是什么主机,盘它!...
- C#—接口和抽象类的区别?
- python中filter、map、reduce的区别
- CSDN-markdown
- c语言及程序设计基础 pdf,c语言程序设计基础.pdf
- 开源版禅道与jira bug关联
- react里面 内联css样式怎么样_简单的使用Radium管理React中的内联样式
- SQL判断某列中是否包含中文字符或者英文字符
- 有位程序员写了部「修仙小说版」编程教程!网友:蚌埠住了 ....
- 校园招聘的在线测评怎么回答?有什么标准?
- java仿QQ聊天软件OIM艰辛之路
- linux简单重定向代码,Linux Shell编程(26)——代码块重定向
- ios 扫描二维码实现自动放大和手势双击放大
- 下载批量上传试题的模板