我保证做一个 完美的方阵 。在这种情况下,我想从矩阵的中心开始matrix[2][2],我知道如何计算中心(int)(dimensions / 2)。我需要按照以下 向外螺旋模式 输出数组的内容。当然,该算法应适用于任何理想的方阵。我不确定这种算法是否已经存在,也不想重新发明轮子。
matrix[2][2]
(int)(dimensions / 2)
int dimensions / 2; 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
此示例的输出应为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
让我们首先确定模式。
偶数平方矩阵,例如:4x4
07 > 08 > 09 > 10 ^ v 06 (01)> 02 11 ^ v v 05 < 04 < 03 12 v [16]< 15 < 14 < 13 Starting Point: [2, 2] ~ [SIZE/2, SIZE/2] Ending Point: [4, 1] ~ [SIZE, 1] Chains: Count(K-chain)=2 for K = 1..(SIZE-2) + 3 for Count = SIZE-1
奇数平方矩阵,示例:5x5
21 > 22 > 23 > 24 >[25] ^ 20 07 > 08 > 09 > 10 ^ ^ v 19 06 (01)> 02 11 ^ ^ v v 18 05 < 04 < 03 12 ^ v 17 < 16 < 15 < 14 < 13 Starting Point: [2, 2] ~ [⌊SIZE/2⌋, ⌊SIZE/2⌋] Ending Point: [1, 5] ~ [1, SIZE] Chains: Count(K-chain)=2 for K = 1..(SIZE-2) + 3 for Count = SIZE-1
现场代码
void print_spiral (int ** matrix, int size) { int x = 0; // current position; x int y = 0; // current position; y int d = 0; // current direction; 0=RIGHT, 1=DOWN, 2=LEFT, 3=UP int c = 0; // counter int s = 1; // chain size // starting point x = ((int)floor(size/2.0))-1; y = ((int)floor(size/2.0))-1; for (int k=1; k<=(size-1); k++) { for (int j=0; j<(k<(size-1)?2:3); j++) { for (int i=0; i<s; i++) { std::cout << matrix[x][y] << " "; c++; switch (d) { case 0: y = y + 1; break; case 1: x = x + 1; break; case 2: y = y - 1; break; case 3: x = x - 1; break; } } d = (d+1)%4; } s = s + 1; } }