输入描述:
输入文件中包含多个测试数据,每个测试数据描述了一个无权有向图。每个测试数据的第一
行为两个正整数n 和m,1 ≤ n ≤ 100,1 ≤ m ≤ 500,分别表示该有向图的顶点数目和边数,顶点的
序号从1 开始计起。接下来有m 行,每行为两个正整数,用空格隔开,分别表示一条边的起点和
终点。每条边出现一次且仅一次,图中不存在自身环和重边。输入文件最后一行为0 0,表示输入
数据结束。
输出描述:
对输入文件中的每个有向图,输出两行:第1 行为n 个正整数,表示每个顶点的出度;第2
行也为n 个正整数,表示每个顶点的入度。每两个正整数之间用一个空格隔开,每行的最后一个
正整数之后没有空格。
#include <stdio.h> #include <string.h> #define MAX 100 //顶点的最大个数 int Edge[MAX][MAX];//邻接矩阵 int main() { int i,j;//循环变量 int n,m;//顶点个数,边数 int u,v;//边的起点和终点 int od,id;//顶点的出度和入度 while(1) { printf("请输入顶点个数和边数\n"); scanf("%d %d",&n,&m);//读入顶点个数n和边数m if(n == 0 && m == 0) { break; } memset(Edge,0,sizeof(Edge)); for(i = 1; i <= m; i++) { printf("请输入边的起点和终点\n"); scanf("%d %d",&u,&v);//读入边的起点和终点 Edge[u - 1] [v - 1] = 1;//构造邻接矩阵 } for(i = 0; i < n; i++)//求各顶点的入度 { od = 0; for(j = 0; j < n; j++) { od += Edge[i][j];//累加到第i列 } 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];//累加到第i列 } if(i == 0) { printf("%d ",id); } else { printf("%d ",id); } } printf("\n"); } return 0; }