matlab邻接列表到邻接矩阵

matlab邻接列表到邻接矩阵,matlab,adjacency-matrix,Matlab,Adjacency Matrix,如何通过matab将邻接表转换为邻接矩阵 例如:这里是邻接列表(无向),第三列是权重 A = sparse([rows; cols],[cols; rows],[s; s]); 1 2 3 1 3 4 14.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

如何通过matab将邻接表转换为邻接矩阵

例如:这里是邻接列表(无向),第三列是权重

A = sparse([rows; cols],[cols; rows],[s; s]);
1 2 3
1 3 4
14.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
你可以使用矩阵。让
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(行(k),列(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

为什么不是对角线零点?如果你考虑无方向的连接,矩阵必须是对称的。我重新格式化了你的矩阵……这就是你所追求的吗?为什么它不是对称的?你能详细解释一下吗?