连通图
Description
判断一个图是否为一个边通图
Input
n 顶点 (n<=100)
边
Output
1 表示连通
0 表示不边通
Sample Input
5
1 2
2 3
5 4
0 0
Sample Output
0
解析
本题解使用深搜(邻接矩阵),简单易解
代码
#include<stdio.h>
#include<iostream>
using namespace std;
int n,x,y=1,a[105][105],b[105]; //a是邻接矩阵,b是判断能不能从第一个点到达第x个点
void dfs(int x){
b[x]=1; //标记
for(int j=1;j<=n;j++) //第一个点到第n个点,一个一个试能不能从第x个点到达
if(a[x][j] and !b[j])dfs(j); //a[x][j]是判断第x个点能不能到达第j个点 !b[j]是判断有没有走过
}
int main(){
scanf("%d",&n); //读入n
while(x!=0 or y!=0){ //如果x和y都一个不为0,就一直读
scanf("%d%d",&x,&y);
a[x][y]=1;a[y][x]=1; //因为是无向图,所以a[x][y]和a[y][x]都要标记为1
}
dfs(1); //从第1个点搜起
bool f=true;
for(int i=1;i<=n;i++)
if(!b[i]){f=false;break;} //有一个点不能达到,先f=false,再直接终止循环
if(!f)printf("0"); //如果!f 就输出0
else printf("1"); //不然就输出1
return 0;
}