Matlab 有没有一种方法可以计算所有这些可能的路径并存储它们?

Matlab 有没有一种方法可以计算所有这些可能的路径并存储它们?,matlab,matrix,Matlab,Matrix,我有一个矩阵,它的每一列代表一系列点,更具体地说: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 5 5 5 5 4 4 4 4 3 3 3 3 2 2

我有一个矩阵,它的每一列代表一系列点,更具体地说:

 1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1
 6     6     6     6     5     5     5     5     4     4     4     4     3     3     3     3     2     2     2     2
 5     4     3     2     6     4     3     2     6     5     3     2     6     5     4     2     6     5     4     3
 1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1
 2     2     2     3     2     2     2     3     2     2     2     3     2     2     2     4     3     3     3     4
 3     3     4     4     3     3     4     4     3     3     5     5     4     4     5     5     4     4     5     5
 4     5     5     5     4     6     6     6     5     6     6     6     5     6     6     6     5     6     6     6
1代表1号点,2代表2号点,依此类推。 如上所述,每列表示一组点的不同配置(x和y坐标)

如果点集为:

 (1,9)
 (2,5)
 (3,7)
 (4,2)
 (2,1)
 (2,3)
根据第一列,一个可能的路径是:

 (1,9)
 (2,3)
 (2,1)
 (1,9)
 (2,5)
 (3,7)
 (4,2)
有没有办法计算所有这些可能的配置并存储它们


当我第一次处理这个问题时,我对图论一无所知,这就是为什么到目前为止我没有使用它。

我不理解序列矩阵第四行后面的逻辑。它充满了
1
,但您的示例似乎完全忽略了它们。根据您的示例,给出以下要点:

(1,9) (2,5) (3,7) (4,2) (2,1) (2,3)
以及第一列序列:

1 6 5 1 2 3 4
输出应为:

(1,9) (2,3) (2,1) (1,9) (2,5) (3,7) (4,2)
而不是:

(1,9) (2,3) (2,1) (2,5) (3,7) (4,2)
因为我不知道您的脚本应该如何工作以及如何处理第四行,所以我实现了一个忽略该逻辑的代码,产生了对我来说最明显的结果:

seq = [
  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  6 6 6 6 5 5 5 5 4 4 4 4 3 3 3 3 2 2 2 2
  5 4 3 2 6 4 3 2 6 5 3 2 6 5 4 2 6 5 4 3
  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  2 2 2 3 2 2 2 3 2 2 2 3 2 2 2 4 3 3 3 4
  3 3 4 4 3 3 4 4 3 3 5 5 4 4 5 5 4 4 5 5
  4 5 5 5 4 6 6 6 5 6 6 6 5 6 6 6 5 6 6 6
];

pts = {
  [1 9]
  [2 5]
  [3 7]
  [4 2]
  [2 1]
  [2 3]
};

paths = pts(seq);
然后,为了访问您可以访问的路径,例如:

for i = 1:size(paths,2)
    disp(cell2mat(paths(:,i)))
end
或:


为什么在每列中重复第1点?您只是在寻找
1:6
的排列,还是存在一些连接信息来确定某个给定点后面可以是哪个点?您能将它们表示为连接矩阵吗?我有一个解决方案,如何找到并保存所有可能的哈密顿路径beaker,1代表起始点,我想在相同路径中的ost点连接,这就是重复的原因。Zlon,很有可能,我想它也用于图形,我能看看你的解决方案吗?@user158013“在ost点”是什么意思?同样,为什么矩阵中存在重复的
1
?它不会出现在示例路径中。你只是忽视了它吗?
1
始终是出发点,还是你只是没有展示其他人?是的,我的脚本正好生成了你想要的内容。是的,我还需要访问这些点,我可以使用cell2mat(),你知道更优雅的解决方案吗?(谢谢!)cell2mat中有什么不够优雅?如果将行数增加一倍,那么每2列就有x/y对。没错,我只是有一段时间没有使用matlab。最后一个问题,如果可以,我可以访问循环中的所有点吗?
paths = cell2mat(paths);

for i = 1:2:(size(paths,2) / 2)
    x = paths(:,i);
    y = paths(:,i+1);
    disp([x y]);
end