Algorithm 邻接矩阵到邻接表的matlab转换

Algorithm 邻接矩阵到邻接表的matlab转换,algorithm,matlab,matrix,Algorithm,Matlab,Matrix,我有一个大的稀疏邻接矩阵,大约有10个节点,我正在用MATLAB处理。我想尽可能有效地将矩阵转换为邻接列表。作为示例邻接矩阵来说明这一点: adj = 1 0 1 0 0 1 0 1 1 输出为: ans = 0 0 2 1 2 2 1 2 我想尽可能高效地完成这项工作,有没有有效的方法来完成这项工作?结果需要是一个向量单元数组,因为连接到每个节

我有一个大的稀疏邻接矩阵,大约有10个节点,我正在用MATLAB处理。我想尽可能有效地将矩阵转换为邻接列表。作为示例邻接矩阵来说明这一点:

adj =
     1     0     1
     0     0     1
     0     1     1
输出为:

ans =
     0     0     2
     1     2
     2     1     2

我想尽可能高效地完成这项工作,有没有有效的方法来完成这项工作?

结果需要是一个向量单元数组,因为连接到每个节点的节点数量不同。以下是一种方法:

[ii, jj] = find(adj); % row and col indices of connections
y = accumarray(ii, jj-1 , [], @(x){sort(x.')}); % get all nodes connected to each node,
    % sorted. Subtract 1 for 0-based indexing
这给

>> celldisp(y)
y{1} =
     0     2
y{2} =
     2
y{3} =
     1     2

稀疏矩阵将是邻接列表的更好表示形式,而不是将其转换为任何形式。需要记住的一点是,MATLAB中的矩阵(包括稀疏矩阵)是列主矩阵,因此您应该相应地确定矩阵的方向。