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