1060: 无向图的最大度计算
题目描述
假设无向图G采用邻接矩阵存储,求出图G最大度值并输出顶点的编号(有多个结果的都要输出)。
输入
第一行为一个整数n,表示顶点的个数(顶点编号为0到n-1)。接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,1表示邻接。
输出
图G中度的最大值以及顶点编号。第一行表示最大度值,第二行表示所有顶点的编号。
样例输入
5
0 1 0 1 1
1 0 1 1 1
0 1 0 1 1
1 1 1 0 1
1 1 1 1 0
样例输出
4
134
思路:
将n个点的度数存放在在一维数组中,通过使用四次for循环输入邻接矩阵、统计每个点的度、找到最大度以及打印度最大的点。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, a[100][100], deg[100]={0}, max ; //n为顶点个数,deg[100]为对应度数,max为最大度
cin >> n; //scanf("%d", &n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin >> a[i][j]; //scanf("%d", &a[i][j]);
}
}
for(int i=0;i<n;i++) //统计每个顶点度数
{
for(int j=0;j<n;j++)
{
if(a[i][j]==1) //如果两点连通则度加一
{
deg[i]++;
}
}
}
max=deg[0];
for(int i=0;i<n;i++) //找最大度
{
if(deg[i]>max)
{
max=deg[i];
}
}
cout << max << endl; //printf("%d\n", max);
for(int i=0;i<n;i++) //找度最大的点
{
if(deg[i]==max) //若度最大则打印该点
{
cout << i; //printf("%d", i);
}
}
return 0;
}
以上方法仅供参考,欢迎互联网的广大朋友们提出指正。