藍橋杯 演算法訓練 關聯矩陣
阿新 • • 發佈:2019-02-04
問題描述
有一個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,明白了這個,就可以邊輸入資料,邊維護矩陣,同樣可以做到資料輸入完成後矩陣也建立好了
接下來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; }