zoukankan      html  css  js  c++  java
  • 算法训练 关联矩阵

    算法训练 关联矩阵  
    时间限制:1.0s   内存限制:512.0MB
     
    问题描述
      有一个n个结点m条边的有向图,请输出他的关联矩阵。
    输入格式
      第一行两个整数n、m,表示图中结点和边的数目。n<=100,m<=1000。
      接下来m行,每行两个整数a、b,表示图中有(a,b)边。
      注意图中可能含有重边,但不会有自环。
    输出格式
      输出该图的关联矩阵,注意请勿改变边和结点的顺序。
    样例输入
    5 9
    1 2
    3 1
    1 5
    2 5
    2 3
    2 3
    3 2
    4 3
    5 4
    样例输出
    1 -1 1 0 0 0 0 0 0
    -1 0 0 1 1 1 -1 0 0
    0 1 0 0 -1 -1 1 -1 0
    0 0 0 0 0 0 0 1 -1
    0 0 -1 -1 0 0 0 0 1

    关联矩阵即用一个矩阵来表示各个点和每条边之间的关系。

    对于一个无向图G,pxq, p为顶点的个数,q为边数。bij 表示在关联矩阵中点i和边j之间的关系。若点i和边j之间是连着的,则bij = 1. 反之,则bij = 0. 例如:

    对于左图为一个无向图G,右图为其关联矩阵。对于关联矩阵第一行1 1 1 0,表示点v1和各边的关系。如图所示,v1和e1,e2,e3相连,和e4未连,故关联矩阵的值为1 1 1 0. 下面各行为点v2,v3, v4和各边的关联,以此类推。

    需要注意的一点,每一行值的总和为该点的度。

    对于有向图,若bij = 1,表示边j离开点i。 若bij = -1, 表示边j进入点i。 若bij = 0,表示边j和点i不相关联。

    知道什么是关联矩阵,这样就可以了,哈哈哈

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int graph[110][1010],m,n;
    int main(void){
        cin >> n >> m;
        for(int i=1;i<=m;i++){
            int a,b;
            cin >> a >> b;
            graph[a][i] = 1;
            graph[b][i] = -1;
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cout << graph[i][j] << " ";
            }
            cout << endl;
        }
        return 0;
    } 
  • 相关阅读:
    如何较为方便的在GMap.Net中实现车辆运行轨迹
    WPF中在摄像头视频上叠加控件的解决方案
    Image Perimeters
    [DFS]排队(间隔排列)-C++
    稀疏图判定
    兔子问题(Rabbit problem)
    YCOJ过河卒C++
    洛谷P1076 寻宝
    P1993 小K的农场(差分约束)
    大Jump!
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8504065.html
Copyright © 2011-2022 走看看