- 积分
- 3632
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
五一假期前想生成一个从内向外螺旋递增的数组:
17 16 15 14 13
18 5 4 3 12
19 6 1 2 11
20 7 8 9 10
21 22 23 24 25
但是失败了。
虽然看似简单,但是我能想出的算法面临着复杂的逻辑。
我的思路是这样:
以5×5的数组为例,那么中心点是[2,2],假设我已经从内向外填了一些空格,那么对于每一步,都面临着四个方向的选择,其中最多2个方向相对于中心点是“顺时针”的,且这2个方向距离中心点有远有近,优先填近的,如果近的已经填了,就走远的。
从中心点到当前位置[i,j]的向量=vec1=[i-2,j-2]
该向量顺时针选装90°的向量=vec2=[j-2,2-i]
当前位置面临的下一步向量dir=[ii,jj]包括[0,1][0,-1][1,0][-1,0]四者
符合顺时针则dir*vec2>0
如果距离中心近的(dir*vec1<0)没有填值(x[i+ii,j+jj] eq 0),就把该位置填上,且当前位置移到该位置,不然就填远离中心的那一位置。
实现了5×5的数组,改动下,形成任意奇数×奇数的螺旋数组
程序见附件。
当然,程序比较臃肿,算法比较原始,如果某位高人有高招,不吝赐教!
后续我可能也会自己跟帖把程序优化一下。。。但平时比较忙。
|
-
-
swan.pro
735 Bytes, 下载次数: 2, 下载积分: 金钱 -5
|