-1

matab を介して隣接リストを隣接行列に変換する方法

例: これは隣接リスト (無向) で、3 番目の列は重みです。

1 2 3
1 3 4
1 4 5
2 3 4
2 5 8
2 4 7

+++++++++++++++++++++

これは次のように変換する必要があります:

   1  2  3  4  5  

1     0  4  5  0   
2  3     4  7  8  
3  4  7     0  0  
4  0  7  0     0  
5  0  8  0  0
4

2 に答える 2

4

sparseマトリックスを使用できます。最初rowsの列、cols2 番目の列、およびs重みになります。

A = sparse([rows; cols],[cols; rows],[s; s]);

マトリックスを見たい場合。使用してfull()ください。

アップデート:

私は答えを少し簡単にしました(要求に応じて、転置された説明を追加する代わりに、すべてを1行にまとめました:

list = [1 2 3
1 3 4
1 4 5
2 3 4
2 5 8
2 4 7];

rows = list(:,1)
cols = list(:,2)
s = list(:,3)

現在、rowscolss必要な情報が含まれています。スパース行列には 3 つのベクトルが必要です。最初の 2 つのベクトルのrows各行colsは、 の同じ行で指定された値のインデックスですs(これは重みです)。

sparse コマンドは、値s(k)を行列要素に割り当てますadj_mat(rows(k),cols(k))

隣接行列は対称であるため、A(row,col) = A(col,row). を行う代わりに、[rows; cols]最初に上三角行列を作成し、次に転置行列を追加して対称行列を完成させることができます。

A = sparse([rows; cols],[cols; rows],[s; s]);    
full(A)

A = 
   0   3   4   5   0
   3   0   4   7   8
   4   4   0   0   0
   5   7   0   0   0
   0   8   0   0   0
于 2013-10-10T12:40:32.613 に答える