现在的位置: 首页 > 综合 > 正文

图论基础之有向图出入度的计算

2018年01月17日 ⁄ 综合 ⁄ 共 971字 ⁄ 字号 评论关闭

马上就开始去老校区进行数模培训了,听韩老师说,美赛很多题都是图论和网络流,于是打算近期恶补图论的相关知识了.

题目是说,对于一个有向图,请用邻接矩阵存储并且输出各个顶点的出度和入度.

解题思路:

这题写出来就是为了好好学习下邻接矩阵的写法,毕竟邻接矩阵也是后续学习图论内容非常重要的一个知识环节.

什么是了邻接矩阵呢?邻接矩阵说的就是对于一个图,把他的所有顶点都抽象出来成为V,把顶点与顶点间的关系抽象出来成为E,

那么不同顶点间肯定会存在边的关系,于是这样,我们就能把这样的一个图通过二维矩阵来描述出来了,如果Edge[i][j]=1,表示这两个顶点之间有边相互连接,

如果表示为0,表示这两个顶点之间没有边相互连接,好了,介绍完邻接矩阵后,再来看看顶点的出入度怎么求解了,我们知道,一个顶点的出入度可以分别从邻接矩阵中读出来了,究竟这个该怎么读呢?我们这样想,把第i个顶点的这一行的值加起来,就对这应了该顶点的出度,把第i个顶点的这一列的值加起来就对应了这个顶点的入度,那么这样一看的话,我们就能够很容易的计算出一个顶点的入度和出度了..

代码:

# include<cstdio>
# include<iostream>
# include<cstring>

using namespace std;

# define MAX 100

int Edge[MAX][MAX];

int main(void)
{
    int n,m;//顶点和边数
    while ( cin>>n>>m )
    {
        int u,v;//边的起点和终点
        int od,id;//顶点的入度和出度
        if ( n == 0 && m == 0 )
            {
                break;
            }
            memset( Edge,0,sizeof(Edge) );
            for ( int i = 1;i <= m;i++ )
                {
                    cin>>u>>v;
                    Edge[u-1][v-1] = 1;
                }
                for ( int i = 0;i < n;i++ )
                    {
                        od = 0;
                        for ( int j = 0;j < m;j++ )
                            {
                                od += Edge[i][j];
                            }
                        if ( i==0 )
                            cout<<od;
                            else
                                cout<<" "<<od;

                    }
                    cout<<endl;

                    for ( int i = 0;i < n;i++ )
                        {
                            id = 0;
                            for ( int j = 0;j < n;j++ )
                                {
                                    id += Edge[j][i];
                                }
                                if ( i == 0 )
                                    cout<<id;
                                    else
                                        cout<<" "<<id;
                        }
                        cout<<endl;

    }

    return 0;
}

抱歉!评论已关闭.