【问题标题】:C - spiral traversal of 2D array outwards (starting from center) and clockwise [duplicate]C - 2D阵列向外(从中心开始)和顺时针的螺旋遍历[重复]
【发布时间】:2017-05-19 09:58:53
【问题描述】:

我正在为我的任务而苦苦挣扎,需要一些帮助。

我必须编写的程序必须遍历(更准确地说 - 填充从 1 到 N^2 的自然数,但遍历算法是我的难题)二维数组 A[N][N],其中 N 是奇数 (1,3,5,7...),从中心 ( A[N/2][N/2] ) 开始,呈螺旋状和顺时针方向移动。

示例(N=5):

25  10  11  12  13
24  9   2   3   14
23  8   1   4   15
22  7   6   5   16
21  20  19  18  17

我看到了模式:center=1; 1xUP、1xRIGHT、2xDOWN、2xLEFT、3xUP、​​3xRIGHT,等等...

如何使用循环实现此算法? 时间在流逝,我被困在这里......

很乐意阅读一些建议并获得帮助。

谢谢!

【问题讨论】:

  • 是的,我看到了,但是我应该如何编辑代码,使它从中心开始,垂直向上,然后继续螺旋和顺时针?这就是斗争。编辑:我还有一个螺旋和顺时针遍历的代码,从索引 [0][0] (矩阵的开头)开始。我目前正在研究它,所以它是从内到外的。我可以在此处粘贴该代码,如果可能的话:给我提示如何修改它。
  • 您也可以为此使用方形内核(而不是圆形cos,sin)参见Rotate a diagonal line in a 2D 3 x 3 grid - rotation matrix needed? 所以只需从矩阵的中心到外边缘循环正方形......类似于渲染同心圆

标签: c algorithm traversal spiral


【解决方案1】:

您可以在此处使用相同的实现并更改第一步的方向:Print 2-D Array in clockwise expanding spiral from center

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

int d - 是当前方向;将其更改为3

【讨论】:

  • 谢谢@knst!我现在正在这样做,它几乎可以工作。需要一些工作才能使其正常工作。写完就写到这里!
  • 好吧,我是这样做的,但剩下的唯一问题是未到达遍历的最后一个元素(坐标为 [0][0] 的元素)。例如:N=5,它根据需要填充矩阵,但最后一个元素(matrix[0][0])具有随机值而不是 N^2 = 25。
  • 请问这些片段(for's)实际上在做什么: for (int k=1; k
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2016-02-14
  • 1970-01-01
  • 2021-08-07
  • 2014-02-02
  • 2016-05-18
  • 1970-01-01
相关资源
最近更新 更多