用python做算法_自己用python写的螺旋矩阵生成算法

自己用python写的螺旋矩阵生成算法

如果输入6,可以生成如下矩阵:

1 20 19 18 17 16

2 21 32 31 30 15

3 22 33 36 29 14

4 23 34 35 28 13

5 24 25 26 27 12

6 7 8 9 10 11

代码如下:

import string

import sys

def outputcirclenumber(m):

x=0

y=0

edgelayer = 0

change_direction_count = 0

clockwise =1

direction =1 #1,2,3,4

outputNum =1

odd = m%2

a = []

for j in range(0,m):

b = [0 for i in range(0,m)]

a.append(b)

#check if the current point is in the corner now,if it is ,change the direction

def checkatcorner(x,y,m,edgelayer,direction):

if x+y<1:

return 0

if x==edgelayer and y==edgelayer+1 and direction==4:

return 1

if x==m-1-edgelayer and y==edgelayer:

return 2

if x==m-1-edgelayer and y==m-1-edgelayer:

return 3

if x==edgelayer and y==m-1-edgelayer :

return 4

return 0

while True:

if checkatcorner(x,y,m,edgelayer,direction):

direction = checkatcorner(x,y,m,edgelayer,direction)

change_direction_count = change_direction_count +1

if not change_direction_count%4 and change_direction_count >0:

edgelayer = edgelayer+1

if x==0 and y==0:

a[x][y] = outputNum

outputNum = outputNum +1

if direction ==1:

x = x+1

a[x][y] = outputNum

if direction ==2:

y = y+1

a[x][y] = outputNum

if direction ==3:

x = x-1;

a[x][y] = outputNum

if direction ==4:

y = y-1;

a[x][y] = outputNum

outputNum = outputNum +1

if odd and x == y and x==m/2 and y==m/2:

break

if not odd and x==m/2-1 and y==m/2:

break

return a

#below is the main functions

if __name__ != "__main__":

print "outside call error"

sys.exit()

number = raw_input("please input the number you want to generate circle matrix:")

try:

num = int(number)

except:

print "\n\nNumber type error\n\n"

if num<=1:

print "number must greater than 1!!!"

sys.exit()

result = outputcirclenumber(num)

for i in result:

for j in i:

print string.rjust(str(j),len(str(num*num)),' '),

print

©著作权归作者所有:来自51CTO博客作者flandycheng的原创作品,如需转载,请注明出处,否则将追究法律责任

noavatar_middle.gif

flandycheng

187篇文章,119W+人气,2粉丝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值