如何通过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
答案 0 :(得分:4)
您可以使用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
的同一行中给出的值的索引(这是权重)。
稀疏命令将值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
答案 1 :(得分: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