algorithm - 帮助螺旋矩阵

标签 algorithm language-agnostic

我需要为 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)。

对于从 1n/2i:

首先获取底部边缘(外层的元素 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/

相关文章:

c - 递归算法的内存

algorithm - 匈牙利算法 : finding minimum number of lines to cover zeroes?

algorithm - 卡汉求和

algorithm - 使用递归提高 DFS 的时间复杂度,使每个节点仅与其后代一起工作

algorithm - 加密单个int的方法

java - 没有分区函数和最坏和最好情况的复杂性的快速排序

algorithm - 修改 Euler Totient 函数

algorithm - 有没有快速的射线→曲面相交算法?

language-agnostic - 如何一次触发一个功能……?

html - 如何处理 HTML 页面的打印?