在 Matlab 中对连接的边进行排序
Sorting Connected Edges in Matlab
我有一个以随机方式存储的边列表,我目前正在尝试以它们全部连接的方式重新排列它们。我想知道是否已经在 matlab 中实现了这样做,或者我可以寻找任何算法来解决这个问题。
让我更具体一点
1 2
3 4
2 5
5 3
必须成为
1 2
2 5
5 3
3 4
每行中的第一个数字是上一行中的第二个数字。
我提前感谢你们的帮助。
当然有更好的方法来做到这一点,但您可以使用 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 的函数中。
您可以轻松地扩展它以处理多个循环和更复杂的问题。
这是使用 ismember
和 sort
的解决方案:
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
请注意,这假设该图非常表现良好,即从起始节点到结束节点恰好有一条路径,并且该路径遍历所有边。
我有一个以随机方式存储的边列表,我目前正在尝试以它们全部连接的方式重新排列它们。我想知道是否已经在 matlab 中实现了这样做,或者我可以寻找任何算法来解决这个问题。 让我更具体一点
1 2
3 4
2 5
5 3
必须成为
1 2
2 5
5 3
3 4
每行中的第一个数字是上一行中的第二个数字。
我提前感谢你们的帮助。
当然有更好的方法来做到这一点,但您可以使用 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 的函数中。
您可以轻松地扩展它以处理多个循环和更复杂的问题。
这是使用 ismember
和 sort
的解决方案:
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
请注意,这假设该图非常表现良好,即从起始节点到结束节点恰好有一条路径,并且该路径遍历所有边。