连通图
Time Limit:1000MS Memory Limit:65536K
Total Submit:205 Accepted:122
Description
判断一个图是否为一个边通图
Input
n
n
n 顶点 (n<=100)
边
Output
1 表示连通
0 表示不边通
Sample Input
5
1 2
2 3
5 4
0 0
Sample Output
0
解题思路
因为一个连通图的 最大连通分量.就等于它的顶点。而且这一题还只用找一次。。。所以,话不多说,代码贴上。。。
代码
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int n,v[10000],s,k[10000],ans=-1,h,t,head[10000],kk;
struct c{
int x,next;
}a[1000];
void bfs(int x){
int xx;
queue<int>k;
k.push(x);
v[x]=1;
h=0;
t=1;
do
{
xx=k.front();
k.pop();
for(int i=head[xx];i;i=a[i].next)
{
if(!v[a[i].x])//判断是否走过
{
++s;
v[a[i].x]=1;
k.push(a[i].x);
}
}
}while(k.size());
}
void add(int x,int y){
++kk;//建立邻接表
a[kk].x=y;
a[kk].next=head[x];
head[x]=kk;
}
int main(){
scanf("%d",&n);
int x,y;
cin>>x>>y;
while(x)
{
add(x,y);
add(y,x);
cin>>x>>y;
}
s=1;
bfs(1);
if(s==n)//判断最大连通分量是否等于顶点数
cout<<1;
else
cout<<0;
}