C - 二维数组向外(从中心开始)顺时针螺旋遍历
C - spiral traversal of 2D array outwards (starting from center) and clockwise
我正在努力完成作业,需要一些帮助。
我必须编写的程序必须遍历(更确切地说 - 填充从 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
我看到了模式:中心=1; 1xUP、1xRIGHT、2xDOWN、2xLEFT、3xUP、3xRIGHT 等等...
如何用循环实现这个算法?
时间在流逝,我被困在这里......
很乐意阅读一些建议并获得帮助。
谢谢!
您可以在此处使用相同的实现并更改第一步的方向:
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
.
我正在努力完成作业,需要一些帮助。
我必须编写的程序必须遍历(更确切地说 - 填充从 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
我看到了模式:中心=1; 1xUP、1xRIGHT、2xDOWN、2xLEFT、3xUP、3xRIGHT 等等...
如何用循环实现这个算法? 时间在流逝,我被困在这里......
很乐意阅读一些建议并获得帮助。
谢谢!
您可以在此处使用相同的实现并更改第一步的方向:
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
.