C - 从任何给定的起点向外以螺旋顺序打印2D阵列

时间:2016-02-09 04:25:24

标签: c arrays algorithm sorting multidimensional-array

我有一组二维字符。我试图找出如何从任何给定的起点以外向螺旋方式打印元素。我的想法是,我基本上会有一个有序列表,从完成时的起点开始,距离最短到最长。

我的意思是向外螺旋: 假设我们有:

1 2 3 4 5

6 7 8 9 a

b c d e f

作为我们的2d数组,我随机选择一个包含'9'的x和y位置(3,1)。

完成时的相应顺序为9,a,f,e,d,8,3,4,5,c,7,2,b,6,1。

请注意,当螺旋线到达边界时,它会像下一个螺旋线那样继续。

我可以打印第一个“螺旋,但我不明白如何检测下一个循环。

1 个答案:

答案 0 :(得分:1)

你的功能将有原型

void print_spiral(char arr[][], unsigned width, unsigned height, unsigned x, unsigned y);

在该功能中,您将首先打印arr[x][y],然后循环以(x,y)为中心的连续方块。每个方格的radius等于边长的一半。您从radius 1开始,然后是2,3,依此类推。

要打印半径r的方块,您可以从(x + r, y)(x + r, y - r),到(x - r, y - r),到(x - r, y + r),再到(x + r, y + r)并重新开始。

对于每个点(a, b),只有

才能打印
0 <= a < width
0 <= b < height

在每个方格中,如果您打印过任何东西,都会跟踪。当你有一个你没有的方格时,你就会停止循环。

这个大纲应该足以让你开始编码。

上述算法可能是最自然的,但它可以以混淆为代价进一步加速。