【图论】连通图

Description

判断一个图是否为一个边通图

Input

n 顶点 (n<=100)

Output

1 表示连通
0 表示不边通

Sample Input

5
1 2
2 3
5 4
0 0

Sample Output

0


解题思路

lzh告诉我这题是有向图,结果改着改着,突然意识到连通图是无向的。。。:)

随便从一个点走,如果可以走到所有点,就可判断为连通的了 (我不会证明)

至于怎么走,可参考五种方法合集任意一种,我用的是BFS+邻接表(STL)


#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct DT{
	int to,next;
}e[40010];
int head[200],n,num,Gun,v[200],t;
queue<int> f;
void BFS(int x){//直接复制过来的
	f.push(x);
	v[x]=1,t=1;
	while(!f.empty()){
		for(int i=head[f.front()];i;i=e[i].next)
		    if(!v[e[i].to]){
		    	v[e[i].to]=1;
		    	++t;
		    	f.push(e[i].to);
		    }
		f.pop();
	}
}
int main(){
	scanf("%d",&n);
	int x,y;
	scanf("%d%d",&x,&y);
	while(x){
		e[++num].to=y,e[num].next=head[x],head[x]=num;
		e[++num].to=x,e[num].next=head[y],head[y]=num;//无向的无向的无向的
		scanf("%d%d",&x,&y);
	}
	BFS(1);//随便从哪个点走都可以
	if(t==n)printf("1");
	   else printf("0");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值