在Matlab中对连接边进行排序

时间:2016-08-12 14:47:58

标签: matlab sorting nodes graph-theory

我有一个以随机方式存储的边缘列表,我正在尝试以它们全部连接的方式重新排列它们。我想知道是否有任何已经在matlab中实现的内容或者我可以寻找的任何算法来解决这个问题。 让我更具体一点

1  2
3  4
2  5
5  3

必须成为

1   2
2   5
5   3
3   4 

其中每行中的第一个数字是上一行中的第二个数字。

我提前感谢你们的帮助。

2 个答案:

答案 0 :(得分:2)

以下是使用ismembersort的解决方案:

E = [ ...
     1 2;
     3 4;
     2 5;
     5 3];

[~,M_IDX] = ismember(E(:,1),E(:,2));
[~,S_IDX] = sort(M_IDX);
G = E(S_IDX,:)

G =

   1   2
   2   5
   5   3
   3   4

请注意,这假设图表非常表现良好,即从起始节点到结束节点正好有一条路径,并且该路径遍历所有路径边缘。

答案 1 :(得分:1)

当然有更好的方法可以做到这一点但你可以用for循环来做。

x=[1  2; 3  4; 2  5; 5  3]; % Your array
orderX=zeros([size(x,1),1);

orderX(1)=1;
for ii=2:size(x,1)
      orderX(ii)=find(x(orderX(ii-1),2)==x(:,1));
end
x=x(orderX,:);

这仅在没有重复的数字且每列中只有一个时才有效。我建议将它包装在一个输入和输出x的函数中。

您可以轻松地将其扩展为使用多个循环以及更复杂的问题。