C - 二维数组向外(从中心开始)顺时针螺旋遍历

标签 c algorithm traversal spiral

<分区>

我正在努力完成我的任务,需要一些帮助。

我必须编写的程序必须遍历(更确切地说 - 填充从 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 等等...

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

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

谢谢!

最佳答案

您可以在此处使用相同的实现并更改第一步的方向: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

关于C - 二维数组向外(从中心开始)顺时针螺旋遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44067004/

相关文章:

c++ - 如何判断传入的数组是一维、二维还是N维数组

java - 查找具有条件的给定数组的数字集的算法

java - 在左子右兄弟树中查找第一个元素

c++ - 遍历bst使用函数指针的正确方法

java - 遍历器关系方向顺序neo4j java

C 读取了错误数量的字符串

c - 如何重新打开文件流并在没有文件名的情况下清空它?

c - openssl RAND_load_file 总是返回 0

algorithm - Perl 处理一万亿条记录

java - 分而治之(通过最少的通话 secret 分享)