什么是连通分量


如图,在上面的图中有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);}
}

【数据结构】图的连通分量相关推荐

  1. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  2. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  3. 【数据结构(C语言)】数据结构-图

    图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...

  4. 数据结构——图(存储结构)

    数据结构--图 图的定义和基本术语 图的类型定义 图的存储结构 数组(邻接矩阵表示法) 网(即有权图)的邻接矩阵表示法 邻接表 邻接表表示法(链式) 图的邻接表存储表示 采用邻接表表示法创建无向网 邻 ...

  5. 数据结构——图的定义和实现

    这里写目录标题 图的定义 各种图的定义 无向边 有向边 图的顶点与边的关系 连通图生成树 图的各种实现 在引入邻接矩阵之前先介绍一下图的相关概念(概念比前树啥的面稍微复杂一点) 图的定义 之前学了线性 ...

  6. 数据结构—图(Part Ⅱ)—最小生成树 最短路径

    目录 最小生成树 普里姆(Prim)算法 算法实现 运行结果 程序分析 克鲁斯卡尔(Kruskal)算法 算法实现 运行结果 程序分析 最短路径 广度优先搜索(BFS)算法 算法实现 运行结果 程序分 ...

  7. 数据结构——图结构:图

    数据结构与算法分析--目录 第一部分:数据结构 数据结构--图结构:图 图基础 \quad 图是一种比线性表和数更为复杂的数据结构.在图结构中,结点之间的关系可以是任意的,也就是说,图中的任意两个数据 ...

  8. 数据结构——图——克鲁斯卡尔(Kruskal)算法

    数据结构--图--克鲁斯卡尔(Kruskal)算法 同样的思路,我们也可以直接就以边为目标去构建,因为权值是在边上,直接去找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环路而 ...

  9. 数据结构--图(Graph)详解(四)

    数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...

最新文章

  1. PHP CodeBase: 将时间显示为“刚刚”“n分钟/小时前”等
  2. oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
  3. Java开发:什么是序列化?
  4. C++ 实现无向图的最小生成树Kruskal算法(完整代码)
  5. CodeForces - 1144F搜索+简单图论
  6. spring集合的注入
  7. windows获取主板序列号和盘符号_【装机帮扶站】第342期:甭管是什么主机,盘它!...
  8. C#—接口和抽象类的区别?
  9. python中filter、map、reduce的区别
  10. CSDN-markdown
  11. c语言及程序设计基础 pdf,c语言程序设计基础.pdf
  12. 开源版禅道与jira bug关联
  13. react里面 内联css样式怎么样_简单的使用Radium管理React中的内联样式
  14. SQL判断某列中是否包含中文字符或者英文字符
  15. 有位程序员写了部「修仙小说版」编程教程!网友:蚌埠住了 ....
  16. 校园招聘的在线测评怎么回答?有什么标准?
  17. java仿QQ聊天软件OIM艰辛之路
  18. linux简单重定向代码,Linux Shell编程(26)——代码块重定向
  19. ios 扫描二维码实现自动放大和手势双击放大
  20. 下载批量上传试题的模板

热门文章

  1. 【vite+vue3】 多页面应用模式
  2. 【tomcat】tomcat启动失败的种种(持续更新)
  3. C语言递归的一些总结
  4. 领导提拔员工看细节,不会容忍这3个“小事”,嘴若太欠后果严重
  5. 无线网络基础知识要点概括
  6. 也说TCP/IP之计算机网络发展史(一)
  7. [LOJ6360]复燃「恋之埋火」
  8. cmd的mysql命令_MySQL cmd命令
  9. vue 上传,下载,预览文件及预览TXT时乱码处理
  10. 2012团购网能HOLD得住吗