如何通过matab将邻接表转换为邻接矩阵
例如:这里是邻接表(无向),第三列是权重。
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
如何通过matab将邻接表转换为邻接矩阵
例如:这里是邻接表(无向),第三列是权重。
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
您可以使用sparse
矩阵。让rows
第一列,cols
第二列和s
重量。
A = sparse([rows; cols],[cols; rows],[s; s]);
如果你想看矩阵。使用full()
.
更新:
我使答案更简单(所有内容都在一行中,而不是根据要求添加转置并包含解释:
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)
现在,rows
和cols
包含s
所需的信息。稀疏矩阵需要三个向量。每一行的前两个向量,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
真的很难说出你在问什么。这是正确的吗?
list = [1 2 3
1 3 4
1 4 5
2 3 4
2 5 8
2 4 7];
matrix = zeros(max(max(list(:, 1:2)))); %// Or just zeros(5) if you know you want a 5x5 result
matrix(sub2ind(size(matrix), list(:,1), list(:,2))) = list(:,3); %// Populate the upper half
matrix = matrix + matrix' %'// Find the lower half via symmetry
matrix =
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