您的位置:首页 > 其它

邻接矩阵存储有向图

2016-02-01 13:57 197 查看

邻接矩阵存储有向图

【输入描述】

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

【输出描述】:

对输入文件的每个有向图,输出两行:第一行为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<stdio.h>
#define  MAXN  100
int   Edge[MAXN][MAXN];
int main( )
{
int  i,j,m,n,u,v;od,id;
while(~scanf( "%d%d”,&n,&m)&&n&&m)
{

memset( Edge, 0, sizeof(Edge) );
for( i=0;i<n;i++)
{
scanf("%d%d",&u,&v);
Edge[u-1][v-1]=1;
}
for(i=0;i<n;i++)
{
od=0;
for(j=1;j<=m;j++)   od+=Edge[i][j];
if(i==0) printf("%d",od);
else printf(" %d",od);
}
printf("\n");
for(i=0;i<n;i++)
{
id=0;
for(j=0;j<n;j++) id=Edge[j][i];
if(i==0)  printf("%d",id);
else printf(" %d",id);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: