Python实现一些简单的算法(5)—九宫格问题
来源:互联网 发布:dnf优化不卡补丁2017 编辑:程序博客网 时间:2024/06/04 17:48
如何解决九宫格问题
问题:
所谓九宫格问题就是在一个行数列数相等切都为奇数的方阵中,每行数字之和,每列数字之和,两个对角线数字之和都相等。
解决思路:
已经有大量资料提供这种问题的解决方法。
矩阵中元素按照下面的方式排列:
横向为x(从0到n-1),纵向为y方向(从0到n-1)
1. 第一个数放在X方向的中间位置
2. 其它数顺次放置各个位置,并依据如下原则:(假设第一个数是a,第二个数是b)
以a为中心的位置关系分别为:
左上|上|右上
左 |a | 右
左下 |下|右下
(1)b放在a的右上位置。a(x,y)–>b(x+1,y-1)
(2)如果仅有“右”位置超过边界,即x+1>n,则b(1,y-1)
(3)如果仅有“上”位置超过边界,即y-1<0,则b(x+1,n)
(4)如果“右”“上”位置都超过边界,即x+1>n,y-1
Python代码
def sudoku_rule(n,sudoku): tx = n/2 ty = 0 for i in range(n*n): sudoku[ty][tx] = i + 1 tx = tx+1 ty = ty-1 if ty<0 and tx>=n: #条件(4) tx = tx-1 ty = ty+2 elif ty<0: #条件(3) ty = n-1 elif tx>=n: #条件(2) tx = 0 elif sudoku[ty][tx]!=0: #条件(5) tx = tx-1 ty = ty+2 return sudokuif __name__=="__main__": n = 5 sudoku = [[0 for i in range(n)] for i in range(n)] s = sudoku_rule(n,sudoku) for line in s: print line
Notes:
- 主函数中定义了sudoku为一个n*n的矩阵
sudoku = [[0 for i in range(n)] for i in range(n)]
这种定义方式不需要导入Numpy模块,直接使用循环的方式生成,比较原始 for line in s: print line
这种方式可以将一个矩阵编依行输出,比较美观。
阅读全文
0 0
- Python实现一些简单的算法(5)—九宫格问题
- iOS之OC随笔-九宫格的算法简单实现
- 九宫格的实现算法
- 简单九宫格算法
- Python-实现九宫格
- 浏览器九宫格的简单实现
- android 最简单的九宫格实现
- Python实现一些简单的算法(2)—计算余数与random模块的使用
- Python实现一些简单的算法(1)—寻找完全数
- Python实现一些简单的算法(4)—将一个字符串转成驼峰数
- 九宫格的算法
- 九宫格的实现
- Python实现一些简单的算法(3)—删除list中重复的元素和collections模块
- Android gridview实现简单的九宫格布局
- 用RelativeLayout 实现简单的九宫格布局
- 基于A*算法的八数码问题(九宫问题)解法的程序实现(新增有无解判断)
- Java和JavaScript实现扩展的九宫格算法
- 关于"数独--九宫格"的算法实现
- 输入一位整数,判断它是几位数
- 5.1
- 输入任意整数中1出现的次数(以-1为结束标志)
- FFmpeg中数据与OpenCV中Mat数据的转换
- linux源码包与RPM包的区别
- Python实现一些简单的算法(5)—九宫格问题
- HDU 2087-剪花布条
- 34.开源项目--git添加新的远程版本库
- 什么是阿里云轻量应用服务器?它有什么优点?值得购买吗?
- python dictionary(字典)
- git对中文的支持
- 编程语言笔记(目录)
- wampserver环境下配置phpmyadmin远程访问mysql数据库
- Oracle管理表