我需要为 Pascal 编写一个程序,使数组像这样以螺旋形式排列:
(7) (8) (9) (10)
(6) (1) (2) (11)
(5) (4) (3) (12)
(16)(15)(14)(13)
从 1 开始一直到 36 但这不是那么重要。
经过 3 天的思考,我不知道如何实现这一点。
问题不在于语言语法或数组,而在于算法。
你能帮我提供任何编程语言的想法、链接、伪代码或程序代码吗?
最佳答案
考虑将 nxn 矩阵拆分为 2x2、4x4、.. nxn 的同心子矩阵。在您的情况下,我们会有外部子矩阵(元素 5 到 16)和内部子矩阵(元素 1 到 4)。
现在,对于每个级别,您应该遍历四个边缘,并用所需的元素填充它们。您可以由内而外或由外而内。我会由外而内。我们保留一个初始值为 n*n
的计数器(在我们的示例中为 16)。
对于从 1
到 n/2
的 i
:
首先获取底部边缘(外层的元素 16-13)。我们从 x[n-i+1][i]
到 x[n-i+1][n-i+1]
并填充(这将是16、15、14、13为一级,4,3为二级)
然后我们取右边缘(外层的元素 12-10)。我们从 x[n-i][n-i+1]
到 x[i][n-i+1]
(外层的元素 12、11、10 ).
然后我们取顶边(外层的元素 9-7)。我们从 x[i][n-i]
到 x[i][i]
(外层的元素 9、8、7)
最后我们取左边缘(外层的元素 6-5)。我们从 x[i+1][i]
到 x[n-i][i]
并填充那一侧(外层为 6、5)。
如果 n
是奇数,最后你得到了中间元素。然后你所要做的就是分配 x[n/2+1][n/2+1] = 1
我希望我把这个想法说清楚了;如果有什么不明白的地方,请问。
我也没有实现解决方案,因为我认为您遇到的问题只是想法,而不是实现
关于algorithm - 帮助螺旋矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109836/