Python之任意阶幻方的构造
本文在用Python构造任意阶幻方的时候,参考的资料如下:
- 维基百科:https://en.wikipedia.org/wiki/Magic_square
- 幻方:http://blog.csdn.net/dxx_111/article/details/50158355
- 论文:由矩阵构造奇数阶幻方的方法,高建国,河南大学学报
Python代码如下:(具体的构造方法可参看以上资料)
# -*- coding: utf-8 -*-
#利用numpy模块构造幻方
import numpy as np#列表循环向左移offset位
def shift_left(lst, offset):return [lst[(i+offset)%len(lst)] for i in range(len(lst))]#列表循环向右移offset位
def shift_right(lst, offset):return [lst[i-offset] for i in range(len(lst))]#构造奇数阶幻方函数
def magic_of_odd_order(n):p = (int)((n-1)/2)#创建矩阵1initial_lst1 = list(range(p+1,n))+list(range(p+1))initial_mat1 = []for i in range(n):initial_mat1.append(shift_left(initial_lst1, i))mat1 = np.array(initial_mat1)#创建矩阵2initial_lst2 = list(range(p,-1,-1))+list(range(2*p,p,-1))initial_mat2 = []for i in range(n):initial_mat2.append(shift_right(initial_lst2, i))mat2 = np.array(initial_mat2)#创建矩阵3,即元素全为1的矩阵mat3= np.ones((n,n),dtype=np.int)#构造幻方magic = n*mat2+mat1+mat3return magic#构造4n阶幻方函数
def magic_of_4n_order(n):mat = np.array(range(1,n*n+1)).reshape(n,n)for i in range((int)(n/4)):for j in range((int)(n/4)):for k in range(4): #将每个4*4小方块的对角线换成互补元素mat[k+4*j][k+4*i] = n*n+1-mat[k+4*j][k+4*i]mat[k+4*j][3-k+4*i] = n*n+1-mat[k+4*j][3-k+4*i]return mat#构造4n+2阶幻方函数
def magic_of_4n2_order(n):p = (int)(n/2)matA = magic_of_odd_order(p)matD = matA+p**2matB = matD+p**2matC = matB+p**2#交换矩阵块A与矩阵块C中特定元素的位置row = (int)((p-1)/2)for i in range(p):if i != row:for k in range((int)((n-2)/4)):matA[i][k],matC[i][k] = matC[i][k],matA[i][k]else:for k in range((int)((n-2)/4)):matA[i][row+k],matC[i][row+k] = matC[i][row+k],matA[i][row+k]#交换矩阵块B与矩阵块D中特定元素的位置col = (int)((p-1)/2)for j in range(col+2-(int)((n-2)/4),col+1):for i in range(p):matB[i][j],matD[i][j] = matD[i][j],matB[i][j]#合并矩阵块A,B,C,D组成幻方magic = np.row_stack((np.column_stack((matA,matB)),np.column_stack((matC,matD))))return magicdef main():order = eval(input('Enter the order of magic square(>=3): '))if order%2 ==1:magic = magic_of_odd_order(order)elif order%4 == 0:magic = magic_of_4n_order(order)else:magic = magic_of_4n2_order(order)print('Generating magic square of %d order......'%order)for row in magic:for col in row:print(col, end='\t')print()#验证生成的magic是否为幻方 val = input(("Do you want to validate?[Y|N]"))if val == 'Y' or val == 'y':print('每行的和:', np.sum(magic, axis=0))print('每列的和:', np.sum(magic, axis=1))print('主对角线的和:', sum([magic[i][i] for i in range(order)]))print('副对角线的和:', sum([magic[i][order-1-i] for i in range(order)]))print('It\'s Done!')main()
运行结果如下:
本次分享到此结束,欢迎大家批评与交流~~
Python之任意阶幻方的构造相关推荐
- 任意阶幻方的python编程实现
摘要:提出任意阶幻方的python语言的实现方法,分为奇数阶,偶数阶(n为整数,分为4n阶和4n+2阶幻方),速度还算可以,你可以体会以下.测试999阶幻方可以算出来: 1,什么是幻方 幻方(Magi ...
- 任意阶幻方(魔方矩阵)C语言实现
魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...
- 任意阶幻方解法及c++实现
任意阶幻方的解法及c++实现 在一个由若干个排列整齐的数组成的正方形中,图中任意一横行.一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为"幻方".我国古代称为" ...
- 任意阶幻方的解法及c++实现
任意阶幻方的解法及c++实现 在一个由若干个排列整齐的数组成的正方形中,图中任意一横行.一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为"幻方".我国古代称为" ...
- 任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。
幻方分为3类.奇阶幻方(奇数).双偶幻方(能够被4整除,如8,12,16--).单偶幻方(4m+2形式,如6,10--),构造算法各不相同. 下面的程序中,奇阶幻方的构造算法为Merzirac法.双偶 ...
- Python实现奇数阶幻方(不用numpy)
幻方(Magic Square),又称纵横图,即在一个n x n的方阵中,放入1~n2的数字,使之各行.各列和两条对角线上的数字之和正好都相等. 一个最基本的三阶幻方大概就是这个样子(当然,他们的镜像 ...
- 【qduoj】奇数阶幻方 (构造)
题干: C语言_魔方阵 描述 魔方阵是一个古老的智力问题,它要求在一个m×m的矩阵中填入1-m2的数字(m为奇数),使得每一行.每一列.每条对角线的累加和都相等,如下为5阶魔方阵示例. 15 8 1 ...
- Matlab 基础应用01 - Python 基础应用 n阶幻方【MagicSquare】和构造
前言: 本章介绍幻方的基本知识,同时利用Matlab 和 Python 构造简单的幻方方阵. 最后用幻方结合图像,展示了一个渐进的魔幻效果. 幻方定义: 简单介绍 幻方(Magic Square)是一 ...
- 任意n阶幻方(魔方)构造——C语言实现
幻方的构造根据n的取值不同有不不同的解法.n取值为奇数,4的倍数(双偶数),非4的倍数的偶数(单偶数)分别对应3种不同的解法.具体步骤参考百度幻方解法. 接下来放代码 /**@Date 2019-09 ...
最新文章
- 微信9年:张小龙指明方向,微信AI全面开放NLP能力
- 开发中内存溢出问题及解决
- 机器学习笔记(八)集成学习
- 北斗导航 | Matlab实现电离层延迟计算:Klobuchar(源代码)
- HTTP协议容易犯的误区
- python最小化打开exe_如何用python使GoAgent窗口打开后自动最小化以及关闭之前的py.exe窗口...
- 斐波那契数列快速算法详解
- 连续对焦 auto对焦_如何在Windows 10上使用对焦辅助(请勿打扰模式)
- 基础功能2-python修改文件中所有文件名
- 信息学奥赛一本通(1181:整数奇偶排序)——快速排序
- c语言中递增递减运算符,递增++和递减-C ++中的运算符
- 如何打开VMware的vmdk虚拟磁盘文件
- python中软件包安装
- FTOUR2 - Free tour II
- 量化指标公式源码_最牛通达信量化副图指标公式源码.doc
- Python敏感词过滤DFA算法+免费附带敏感词库
- vassistx插件
- SVG中中文字体的显示
- [NIPS 2018] Stacked Semantics-Guided Attention Model for Fine-Grained Zero-Shot Learning
- C语言中的文件操作(二)