[图论]连通图:深搜(邻接矩阵)

连通图



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;
} 
posted @ 2019-12-19 16:37  学校开除后  阅读(386)  评论(0编辑  收藏  举报