java判断图中两点是否连通_连通分量(求有几个连通分量+判断是否两点连通+是否为强联通图 相应例子)...

本文介绍了使用DFS算法在Java中解决图的连通性问题,包括计算连通分量个数和判断图中两点是否连通。提供了两种实现方式,一种是基于邻接矩阵的DFS搜索,另一种是利用邻接表的DFS染色法。同时,给出了相关代码示例和问题解答。
摘要由CSDN通过智能技术生成

参考博客:

https://blog.csdn.net/jinzk123/article/details/52231527

https://blog.csdn.net/qq_40998706/article/details/86697221

一 .   DFS+标记

(求连通分量个数)

题目描述  在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图, 否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。 例如:一个无向图有5个顶点,1-3-5是连通的,2是连通的,4是连通的,则这个无向图有3个连通分量。

输入  第一行是一个整数T,表示有T组测试样例(0 < T <= 50)。每个测试样例开始一行包括两个整数N,M,(0 < N <= 20,0 <= M <= 200) 分别代表N个顶点,和M条边。下面的M行,每行有两个整数u,v,顶点u和顶点v相连。

输出  每行一个整数,连通分量个数。 示例输入

2 3 1 1 2 3 2 3 2 1 2

示例输出

2 1

#include

#include

#include

int mp[100][100];     //此处当稀疏图处理,建立邻接矩阵

int vis[100];

//传入起点和所有点的个数

void dfs(int x,int n)         //dfs搜索,每搜索到一个点处标记已经遍历过,继续dfs直到无点可连

{                             //最终所有与x有路相连的点都被遍历到并标记

vis[x]=1;

for(int i=1;i<=n;i++)

{

if(!vis[i]&&mp[x][i])    //没有遍历过该点(v)并且两点(u-v)间有路相连(无向图)

{

dfs(i,n); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值