顶点的度

7-12 顶点的度 (20 分)

顶点的图。给定一个有向图,输出各顶点的出度和入度。

输入格式:
输入文件中包含多个测试数据,每个测试数据描述了一个无权有向图。每个测试数据的第一行为两个正整数n 和m,1 ≤ n ≤ 100,1 ≤ m ≤ 500,分别表示该有向图的顶点数目和边数,顶点的序号从1 开始计起。接下来有m 行,每行为两个正整数,用空格隔开,分别表示一条边的起点和终点。每条边出现一次且仅一次,图中不存在自身环和重边。输入文件最后一行为0 0,表示输入数据结束。

输出格式:
对输入文件中的每个有向图,输出两行:第1 行为n 个正整数,表示每个顶点的出度;第2行也为n 个正整数,表示每个顶点的入度。每两个正整数之间用一个空格隔开,每行的最后一个正整数之后没有空格。

输入样例:

7 9 
1 2 
2 3 
2 5 
2 6 
3 5 
4 3 
5 2 
5 4 
6 7 
0 0

输出样例:

1 3 1 1 2 1 0 
0 2 2 1 2 1 1

上代码:

#include<bits/stdc++.h>
using namespace std;

#define Max 100
int arr[Max][Max];
int N,M;
void setArr()
{
    for(int i=0; i<=N; i++)
    {
        for(int j=0; j<=N; j++)
        {
            arr[i][j]=0;
        }
    }
}
void outArr()
{
    for(int i=1; i<=N; i++)
    {
        int sum=0;
        for(int j=1; j<=N; j++)
        {
            if(arr[i][j]==1)
                sum++;
        }
        if(i==1)cout<<sum;
        else cout<<" "<<sum;
    }
    cout<<endl;
}
void inArr()
{
    for(int i=1; i<=N; i++)
    {
        int sum=0;
        for(int j=1; j<=N; j++)
        {
            if(arr[j][i]==1)
                sum++;
        }
        if(i==1)cout<<sum;
        else cout<<" "<<sum;
    }
    cout<<endl;
}
int main()
{
    for(int f=0;; f++)
    {
        cin>>N>>M;
        if(N==0&&M==0)break;
        setArr();
        for(int i=0; i<M; i++)
        {
            int fir,aim;
            cin>>fir>>aim;
            arr[fir][aim]=1;
        }
        outArr();
        inArr();
    }
    return 0;
}

发布了19 篇原创文章 · 获赞 16 · 访问量 8489

猜你喜欢

转载自blog.csdn.net/qq_42529477/article/details/85246264