1

到目前为止,我已经看到,当有人想要使用螺旋线一个一个地读取矩阵的元素时,他们总是意味着使用 MxM 矩阵向外开始并缓慢移动到中心。我们将如何做相反的事情,从矩阵内的一个随机点开始,并使用“螺旋”路径来读取所有元素。

我正在使用 Matlab 进行测试。

例子。

mat=
  1 2 3
  4 5 6
  7 8 9 

如果假设我们从 mat(3,1) 开始顺时针旋转,那么我们会有

vec=
  7, 8, 4, 5, 6, 9, 1, 2, 3

如果我们从 mat(2,2) 开始,那么

vec=
5, 6, 9, 8, 7, 4, 1, 2, 3
4

1 回答 1

2

一种可能的方法:

mat = [1 2 3; 4 5 6; 7 8 9];
M = length(mat); % Assuming mat is always MxM

r = 3;
c = 1;

temp = spiral(2 * M - 1);
temp = temp(M - r + 1:end - r + 1, M - c + 1:end - c + 1);
[~, idx] = sort(temp(:));
vec = mat(idx).'

结果运行r = 3c = 1

vec =

     7     8     4     5     6     9     1     2     3

结果运行r = 2c = 2

vec =

     5     6     9     8     7     4     1     2     3
于 2014-04-29T01:05:41.627 回答