题目描述
假设无向图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>
#define MaxSize 100
int G[MaxSize][MaxSize],n;
bool visited[MaxSize]={false};
void DFS(int k)
{
visited[k]=true;//标记结点k已被访问
for(int i=0;i<n;i++)
{
if(G[k][i]==1&&visited[i]==false)
{
DFS(i);
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&G[i][j]);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(visited[i]==false)//如果未被访问
{
ans++;
DFS(i);
}
}
}
printf("%d",ans);
}
该程序实现了一个算法,通过深度优先搜索(DFS)在邻接矩阵表示的无向图中查找连通分量,并输出连通分量的个数。输入包括顶点数量和邻接矩阵,输出是连通分量的数量。样例输入是一个5个顶点的图,经过DFS遍历后,输出连通分量个数为1,表明所有顶点都在同一个连通分量内。

1116

被折叠的 条评论
为什么被折叠?



