【图论】求连通分量【深搜】(两种方法)【广搜】(两种方法)

题目:

求一个图的连通分量 在这里插入图片描述

输入:

n 顶点数(<=100) 边

样例输入:

8
6 3
1 2
2 5
5 4
4 1
8 7
0 0

输出:

连通分量。

样例输出:

4

思路:

这道题可以用四种方法(DFS+邻接矩阵、DFS+邻接表、BFS+邻接矩阵、BFS+邻接表)来做

DFS:

从某一初始出发点i开始访问: 输出该点编号;并对该点作被访问标志(以免被重复访问)。

再从i的其中一个未被访问的邻接点j作为初始点出发继续深搜。

当i的所有邻接点都被访问完,则退回到i的父结点的另一个邻接点k再继续深搜。

直到全部结点访问完毕

BFS:

按层次遍历来搜索,也就是一层一层地往下搜,直到图中所有所有可被访问的结点都被访问到。

那么,我们就可以利用DFS&&DFS来

作这一题了。

方法一:

D F S + 邻 接 矩 阵 DFS+邻接矩阵 DFS+

代码:

#include<cstdio>
#include<iostream>
using namespace std;
int a[101][101],b[101];
int n,x,y,s,ans;
void dfs(int i)//深搜过程
{
   
	b[i]=1;
	for(int j=1;j<=n;j++)
		if (a[i][j]&&!b[j])
	    ++s,dfs(j);
}
int main()
{
   
	scanf("%d%d%d",&n,&x,&y);//输入
	while(x&&y)
	{
   
	    a[x][y]=a[y][x]=1;//标记。
		scanf("%d%d",&x,&y);//输入。
	}
		for (
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值