連通圖
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;
}