数组Edge存储图的邻接矩阵,数组od和id分别存储图的出度和入度,下述代码存储的是一个有向图,且变量u、v代表顶点u和v之间有连线,方向是从u到v,每个测试数据第一行输入两个正整数n和m,分别代表点的个数和边的个数,且1<=n<=100,1<=m<=500,图中不存在自身环和重边。当输入n==0且m==0时输入结束。
#include<stdio.h>
#include<string.h>
#define MAX 101
int main()
{
int n,m;
int u,v;
int i,j;
int od[MAX],id[MAX];
int Edge[MAX][MAX];
while(scanf("%d%d",&n,&m)&&(n!=0&&m!=0))
{
memset(od,0,sizeof(od));
memset(od,0,sizeof(id));
for(i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
Edge[u-1][v-1]=1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
od[i]=od[i]+Edge[i][j];
id[j]=id[j]+Edge[i][j];
}
}
for(i=0;i<n;i++)
printf("%d ",od[i]);
printf("\n");
for(i=0;i<n;i++)
printf("%d ",id[i]);
}
return 0;
}