E1_1 用邻接矩阵存储有向图,并输出各顶点的出度和入度

Posted on 2016-04-12 10:48  徐岩  阅读(1582)  评论(0)    收藏  举报

参考书:图论算法理论、实现及应用(北京大学出版社)

输入数据:(test.txt)

7 9
1 2
2 3
2 5
2 6
3 5
4 3
5 2
5 4
6 7
0 0

程序:

/* 邻接矩阵存储有向图 */

#include <cstring>
#include <cstdio>

#define MAXN 100
int matrix[MAXN][MAXN];

int main()
{
    int n, m;
    freopen("test.txt", "r", stdin);

    while(scanf("%d %d", &n, &m) && m && n)
    {
        int i, j, u, v;

        memset(matrix, 0, sizeof(matrix));

        for(i = 0; i < m; ++i)
        {
            scanf("%d %d", &u, &v);
            --u, --v;  // 输入数据中顶点序号从1开始记起
           matrix[u][v] = 1;
        }

        // 输出出度
        int inDegree;
        for(i = 0; i < n; ++i)
        {
            inDegree = 0;
            for(j = 0; j < n; ++j)
                inDegree += matrix[i][j];
            printf("%d ", inDegree);
        }

        printf("\n");

        int outDegree;
        for(i = 0; i < n; ++i)
        {
            outDegree = 0;
            for(j = 0; j < n; ++j)
                outDegree += matrix[j][i];
            printf("%d ", outDegree);
        }
        printf("\n");
    }

    return 0;
}