1061: 有向图的k出度计算
题目描述
假设有向图G采用邻接矩阵存储,计算图G中出度为k的顶点数量,并输出顶点的编号。
输入
第一行第一个整数n表示顶点的个数(顶点编号为0到n-1),第二个数表示出度k,接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,1表示不邻接。
输出
图G中出度为k顶点数量以及顶点编号。第一行表示出度为k顶点数量,第二行表示顶点的编号。
样例输入
5 2
0 1 0 1 0
0 0 1 1 0
0 0 0 0 0
0 0 0 0 0
1 0 0 1 0
样例输出
3
014
思路:
将n个点的度数存放在在一维数组中,通过使用四次for循环输入邻接矩阵、统计每个点的度、找到度为k的点以及打印度为k的点。(tips:和1060有异曲同工之妙)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, k, a[100][100], deg[100]={0} , cnt=0; //n为顶点个数,deg[100]为对应度数,max为最大度 , cnt为度为k的数量
cin >> n >> k; //scanf("%d %d", &n, &k);
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]++;
}
}
}
for(int i=0;i<n;i++) //寻找度为k的点个数cnt
{
if(k==deg[i])
{
cnt++;
}
}
cout << cnt << endl; // printf("%d\n", cnt);
for(int i=0;i<n;i++) //输出度为k的点
{
if(deg[i]==k)
{
cout << i; //printf("%d", i);
}
}
return 0;
}