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");
}