自己用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的原创作品,如需转载,请注明出处,否则将追究法律责任

flandycheng

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

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

  1. python做交易软件_我用Python做了个量化交易工具!

    量化交易是指借助现代统计学和数学的方法,利用计算机技术进行投资交易的方式. 对于从未接触过量化的人来说,想要了解量化到底是做什么的,关键掌握四部份的内容:Python基础知识.金融知识.技术指标.量化 ...

  2. python做单元测试_如何使用python做单元测试?

    很多编程小白不太理解单元测试,为什么要进行单元测试呢?很简单,主要是提高代码的正确,同时确保重构不出错.接下来我们一起学习怎么用python做单元测试吧. python内置了一个unittest,但是 ...

  3. 用python做数据挖掘_你用 Python 做过什么有趣的数据挖掘项目?

    有网友在知乎提问:「你用 Python 做过什么有趣的数据挖掘项目?」 我最近刚开始学习 Python, numpy, scipy 等, 想做一些数据方面的项目,但是之前又没有这方面的经验.所以想知道 ...

  4. java做爬虫和python做爬虫_为什么常用Python,Java做爬虫,而不是C#C++等?

    我写了爬虫在c#和java.区别不大,原则是充分利用正则表达式.这只是一个平台的问题.后来我才知道,许多爬虫是用python编写的.因为我不熟悉python目前,我不知道为什么.百度给了以下结果:1) ...

  5. 如何使用python做图_如何使用python做动图

    python可以做动图吗 ImageMagick 是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,D ...

  6. 用python做头像_如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  7. 如何用python做表_如何使用Python中的Tkinter制作钟表?

    这就不得不说,python真的是一个非常神奇的编程语言,小编在浏览一些知识资料时候,根据内容,整合了解后,发现居然可以制作钟表,立刻来了兴趣,于是根据内容编写了以下代码,大家如果感兴趣的话,也可以来看 ...

  8. python做小波分析_浅谈Python小波分析库Pywavelets的一点使用心得

    本文介绍了Python小波分析库Pywavelets,分享给大家,具体如下: # -*- coding: utf-8 -*- import numpy as np import math import ...

  9. 如何用python做计算_如何运用Python编写简易计算器?

    分3步吧使用Qt-Designer 设计UI 将UI文件转换成py文件 实现加减乘除的业务逻辑 效果如下: 附代码: CalculatorUI.py # -*- coding: utf-8 -*- # ...

最新文章

  1. 「二分查找」之我见!今天刷一道leetcode算法!
  2. 详解Scala与Java的互动
  3. nginx配置反向代理解决前后端分离跨域问题
  4. Java字节码指令简介
  5. Effective C++ 条款03:尽可能使用const
  6. js判断ipad还是安卓_JS判断客户端是否是iOS或者Android
  7. php 单一职责原则,Laravel深入学习8 - 单一责任原则
  8. Javascript的数组操作(笔记)
  9. 日历控件,可运行在XHTML1.0下
  10. 深度学习笔记_卷积神经网络参数计算
  11. quartus-ModeliSm仿真教程
  12. 华三基础命令(单臂,超级vlan,远程,聚合)
  13. 中线提取算法_一种应用VisualGraph算法提取道路中线的方法与流程
  14. 使用antV-G6在angualr中画树形关系图
  15. 什么是开关量,I/O区分详细解答
  16. 【Linux】进程概念 —— 进程状态
  17. Spring Cloud Stream教程(二)主要概念
  18. 软件测试技术 中医体质判定表,中医体质分类与判定自测表(中华中医药学会标准)...
  19. python用于计算和数据处理的包有哪些_chapter3-2 常用数据处理包Numpy整理2
  20. MAVROS started. MY ID 1.240, TARGET ID 1.1

热门文章

  1. Udacity机器人软件工程师课程笔记(二十八) - 卷积神经网络实例 - Fashion-MNIST数据集
  2. 【讲人话】Angular如何通过@ViewChildren获取实时渲染的动态DOM节点元素(@ViewChild只能获取静态的固定DOM节点)
  3. 【禅模式】如何进入极度专注的心流状态,让前端开发能力发挥到最大?设置VSCode禅模式快捷键Alt+F切换全屏,适合演示代码使用
  4. elementUI 写一个表头列名、表体单元格样式、翻页器相对较为动态的表格el-table
  5. 【最简洁】一句CSS3代码实现不规则自定义背景图拼接样式,多用于异形弹窗背景图
  6. 重装电脑后遇到的问题,其他设备,未知设备
  7. linux进程间通信:消息队列实现双端通信
  8. 如何判断CPU、内存、磁盘的性能瓶颈?
  9. 4566: [Haoi2016]找相同字符 SAM
  10. Linux 环境变量配置