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;
}