螺旋数字的python实现

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

螺旋数字的算法简单实现。

示例 5

01 02 03 04 05

16 17 18 19 06

15 24 25 20 07

14 23 22 21 08

13 12 11 10 09

通过观察,外部数字进行环绕一圈后向内收拢。

从程序出发,只要递归处理好4条边即可。

同时为了避免顶点重复赋值,最后一个点让后续的边处理。

说明:处理暂时存储在一个list对象中。

实现代码:

def getlocIndex(l_x,l_y,steps):

return l_x + l_y*steps

def increaseSeedAndSteps(curSeed,cur_steps):

return (curSeed +1,cur_steps+1)

def setTargetItem(targetlst,l_cur_x,l_cur_y,steps,curSeed):

loc_index = getlocIndex(l_cur_x, l_cur_y, steps)

targetlst[loc_index] = curSeed

def calc(targetlst,seed,l_x,l_y,nextsteps,steps):

current_seed = seed

loop_steps = nextsteps-1

if( nextsteps < 1 ):

setTargetItem(targetlst, l_x, l_y,steps, current_seed)

return

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x+each_steps, l_y,steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x+nextsteps, (l_y+each_steps), steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x+nextsteps-each_steps, l_y+nextsteps, steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

each_steps = 0

while(each_steps <= loop_steps):

setTargetItem(targetlst, l_x, l_y+nextsteps-each_steps, steps, current_seed)

current_seed,each_steps = increaseSeedAndSteps(current_seed ,each_steps)

if(nextsteps-2 >= 0):

calc(targetlst,current_seed,l_x+1,l_y+1,nextsteps-2,steps)

测试代码:

def outputResult(targetlst,steps):

outBuffer = ''

for rowIndex in range(0, steps* steps):

if(rowIndex % steps == 0 and len(outBuffer) >0):PRint('%s\n' % (outBuffer))

outBuffer = ''

outBuffer = outBuffer + '%02d ' %(targetlst[rowIndex])

print('%s\n' % (outBuffer))

import traceback

try:

steps =5

targetlst = list()

[ targetlst.append(0) for nTry in range(0,steps* steps)]

calc(targetlst, 1,0,0,steps-1,steps)

outputResult(targetlst, steps)

except Exception as exc:

print("app catch: %s\n" % ( exc));

info = traceback.format_exc()

print(info)

print("done")

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航