题目描述
用邻接矩阵存储有向图,并输出各顶点的出度和入度。
输入
输入描述:
输入文件中包含多个测试数据,每个测试数据描述了一个有向图。每个测试数据的第一行为一个正整数n (1≤n≤100),表示该有向图的顶点数目,顶点的序号从1开始计起。接下来包含若干行,每行为两个正整数,用空格隔开,分别表示一条边的起点和终点。每条边出现一次且仅一次,图中不存在环和重边。0 0代表该测试数据的结束。输入数据最后一行为0,表示输入数据结束。
输出
输出描述:
对输入文件中的每个有向图,输出两行:第1行为n个正整数,表示每个顶点的出度;第2行也为n个正整数,表示每个顶点的入度。每两个正整数之间用一个空格隔开,每行的最后一个正整数之后没有空格。
样例输入
7 1 2 2 3 2 5 2 6 3 5 4 3 5 2 5 3 6 5 0 0 0
样例输出
1 3 1 1 2 1 0 0 2 3 0 3 1 0
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int edge[105][105],i,j,n,st,end,cd,rd;
while(scanf("%d",&n),n){
memset(edge,0,sizeof(edge));
for(i=1;;i++){
cin>>st>>end;
if(st==0&&end==0)break;
edge[st][end]=1;
}
for(i=1;i<=n;i++){
cd=0;
for(j=1;j<=n;j++)cd+=edge[i][j];
if(i==n)cout<<cd;
else cout<<cd<<" ";
}
cout<<endl;
for(i=1;i<=n;i++){
rd=0;
for(j=1;j<=n;j++)rd+=edge[j][i];
if(i==n)cout<<rd;
else cout<<rd<<" ";
}
cout<<endl;
}
return 0;
}