【无标题】根据输入的图的邻接矩阵A,判断此图的连通分量的个数。
2021/11/17 23:42:43
本文主要是介绍【无标题】根据输入的图的邻接矩阵A,判断此图的连通分量的个数。,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【问题描述】
根据输入的图的邻接矩阵A,判断此图的连通分量的个数。
【输入形式】
第一行为图的结点个数n,之后的n行为邻接矩阵的内容,每行n个数表示。其中A[i][j]=1表示两个结点邻接,而A[i][j]=0表示两个结点无邻接关系。
【输出形式】
输出此图连通分量的个数。
【样例输入】
5
0 1 1 0 0
1 0 1 0 0
1 1 0 0 0
0 0 0 0 1
0 0 0 1 0
【样例输出】
2
【样例说明】
邻接矩阵中对角线上的元素都用0表示。(单个独立结点,即与其它结点都没有边连接,也算一个连通分量)
【评分标准】
要求必须使用图的广度或者深度优先遍历算法,否则不得分。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define Length 20
int vertex[100];
int visited[100];
int a[100][100]={0};
int length;
int edge;
int List[100];
int start=0;
int head;
int tail;
void creatmatrix()
{
int n,e;
int m;
int ma;
int start,end;
int clo,row;
int i,j,k,l;
//printf("请输入要输入的节点数量:\n");
scanf("%d",&n);
length=n;
// printf("请输入邻接矩阵:\n");
for(i=1;i<=length;i++)
{
for(j=1;j<=length;j++)
{
scanf("%d",&ma);
a[i][j]=ma;
}
}
for(k=1;k<=length;k++)
{
vertex[k]=k;
}
}
void show()
{
int i,j;
for(i=1;i<=length;i++)
{
printf("%d ",vertex[i]);
}
printf("\n");
for(i=1;i<=length;i++)
{
for(j=1;j<=length;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
}
void BFS(int many)
{
int i,j,n,m,b,cur;
head=1;
tail=1;
//printf("广度优先开始遍历的图的顶点为%d:\n",many);
List[tail]=many;
tail++;
visited[many]=1; //标记1号顶点已访问
while(head<tail && tail<=length)
{
cur=List[head]; //当前正在访问的顶点编号
for(i=1;i<=length;i++) //从1~n依次尝试
{
//判断从顶点cur到顶点i是否有边,并且顶点i没有被访问过,则将顶点i入队
if(a[cur][i]==1&&visited[i]==0){
List[tail]=i;
tail++;
visited[i]=1;
//标记顶点i已访问
}
//如果tail大于n,则表明所有顶点都已经被访问过
//if(tail>n)
// {
// break;
// }
}
head++; //当一个顶点扩展结束后,执行head++才能继续往下扩展
}
//for(i=1;i<tail;i++)
// printf("%d ",List[i]);
//printf("\n");
}
void detect()
{
int i,j,num=0,m;
for(j=1;j<=length;j++)
{
visited[j]=0;
}
for(i=1;i<=length;i++)
{
if(visited[i]==0)
{
BFS(i);
num++;
}
//printf("\n");
}
printf("%d ",num);
}
int main()
{
int m,n;
creatmatrix();
detect();
}
这篇关于【无标题】根据输入的图的邻接矩阵A,判断此图的连通分量的个数。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)