[圖論]連通圖:深搜(鄰接矩陣)

連通圖



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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章