我有一个3X3单元格数组,每个元素都存储一个(x,y)点。
该点由[0,1]中的随机数生成。
我想要做的是对单元格数组进行排序,使其看起来像
前:9分
每个圆圈都是一个2D点
索引:左上角的(1,1)和右下角的(3,3)作为通常的数组索引
这是为了确保拓扑顺序。
我该怎么做?
提前感谢。
示例
pairs = [4 9 2 6 5 1 7 8 3; 9 6 2 1 3 8 7 4 5] (row 1 = x-values, row 2 = y-values))
我想要做的是将它们放在单元格数组中,以便它们可以通过读取线连接,如图像的拓扑结构。
答案 0 :(得分:2)
排列数为factorial(9)
,这个数字不是很大。因此,一种粗暴的方法是可行的:测试所需条件的所有排列,并选择第一个有效的排列。
在下文中,我使用的是2x3x3阵列,而不是包含长度为2的向量的3x3单元阵列,因为它更容易。
N = 3;
data = rand(2,N,N);
permutations = perms(1:N^2); %// generate all permutations
for k = 1:numel(permutations)
dx = reshape(data(1,permutations(k,:)),N,N); %// permuted x data
dy = reshape(data(2,permutations(k,:)),N,N); %// permuted y data
if all(all(diff(dy,[],1)<0)) && all(all(diff(dx,[],2)>0)) %// solution found
disp(dx) %// display solution: x values
disp(dy) %// y values
break %// we only want one solution
end
end
请注意,对于data
的某些选项,可能没有解决方案。