1. 程式人生 > >藍橋杯 演算法訓練 關聯矩陣

藍橋杯 演算法訓練 關聯矩陣

問題描述   有一個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 首先要明白什麼是關聯矩陣,本題是有向圖的關聯矩陣,在矩陣中,橫座標代表點,縱座標代表邊,如果有一個點是一條邊的起點,那麼矩陣中相應的值為1,如果為終點,那麼值為-1,如果不關聯,值為0,明白了這個,就可以邊輸入資料,邊維護矩陣,同樣可以做到資料輸入完成後矩陣也建立好了
#include<iostream>
#include<memory.h>
using namespace std;
int main()
{
    int v,v1,v2,e,i,j;
    int map[100][1000];
    cin>>v>>e;
    for(i=0; i<100; i++)
        memset(map[i],0,sizeof(map[i]));
    for(i=0; i<e; i++)
    {
        cin>>v1>>v2;
        v1--;
        v2--;
        map[v1][i]=1;
        map[v2][i]=-1;
    }
    for(i=0; i<v; i++)
    {
        for(j=0; j<e; j++)
        {
            cout<<map[i][j];
            if(j<e-1)
                cout<<' ';
        }
        cout<<endl;
    }

    return 0;
}