無向圖的連通分量計算
5000(ms)
10000(kb)
2380 / 5224
Tags: 圖
假設無向圖G採用鄰接矩陣存儲,編寫一個算法求連通分量的個數。
輸入
第一行爲一個整數n,表示頂點的個數(頂點編號爲0到n-1),接下來是爲一個n*n大小的整數矩陣,表示圖的鄰接關係。數字爲0表示不鄰接,1表示不鄰接。
輸出
連通分量的個數。
樣例輸入
5 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0
樣例輸出
1
#include<stdio.h>
int a[100]={0};//s初始化標記
void CreateMap(int n,int edges[100][100])//創建鄰接矩陣
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&edges[i][j]);
}
}
}
void SearchMap(int k,int edges[100][100],int n)//查找所有連通的結點,並且標記
{
a[k]=1;
for(int i=0;i<n;i++)
{
if(edges[k][i]==1&&a[i]==0)
SearchMap(i,edges,n);
}
}
int main()
{
int edges[100][100];
int n;
scanf("%d",&n);
CreateMap(n,edges);
int sum=0;//初始化統計值
for(int i=0;i<n;i++)//從第一個結點開始到n-1查找連通分量
{
if(a[i]==0)//如果該結點未標記則sum+1,並且查找於該結點連接的所有結點
{
sum++;
SearchMap(i,edges,n);
}
}
printf("%d",sum);
}