【SSL 1759】求最大连通分量【图论】【五种做法】

本文介绍了图论中的一个基础问题——求解一个图的最大连通分量,提供了深搜和广搜两种策略,结合邻接矩阵和邻接表的数据结构,给出了五种不同的解决方案。详细讲解了每种方法的思路和代码实现,强调了不同数据结构和搜索策略对效率的影响。
摘要由CSDN通过智能技术生成

Description

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

Input

n 顶点数(<=100)

Output

连通分量

Sample Input

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

Sample Output

4

说明:
这道题是一道比较简单的图论题。方法有很多种,要注意输入。

方法一: 深搜+邻接矩阵

这应该说是最简单的一种方法了,要注意判断有没有访问过。

CODE:

#include<iostream>
#include<cstdio>
using namespace std;
int n,x,y,ans,g[10005][10005];
bool v[10005];
int dfs(int i){
   
	int t=1;
	v[i]=1;
	for (int j=1;j<=n;j++)
	if (g[i][j]&&!v[j])  //未访问&连通
	    t+=dfs(j);  //累加
	return t; 
}
int main()
{
   
	cin>>n>>x>>y;
	while(x&&y)
	{
   
		g[x][y]=1;  //邻接矩阵
		g[y][x]=1;
		cin>>x>>y;
	}
	for (int i=1;i<=n;i++)
	  if (!v[i])  // 判断有没有到过
	    ans=max(ans,dfs(i));
	cout<<ans;
	return 0;
}

方法二: 深搜+邻接表

还是用深搜,但用邻接表比用邻接矩阵搜索快一些。

CODE:

#include<iostream>
#include<cstdio>
using namespace std;
struct node{
   
	int y,next;
}e[10005];
in
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值