前言:
如今我们对“数独题目生成算法怎么做”大致比较着重,咱们都需要学习一些“数独题目生成算法怎么做”的相关资讯。那么小编同时在网摘上搜集了一些关于“数独题目生成算法怎么做””的相关资讯,希望大家能喜欢,朋友们快快来了解一下吧!输入n,生成一个n*n的列表,将1,2……n*n填入其中,使得行、列、对角线的和都相同。例如n=3时
首先说明这道题的答案其实并不唯一,所以这里提供的解法只是其中的一个方案而已,本质来讲是一种贪心算法。
抓住的本质就是连续相邻的数一般不让他放在同行同列(除非必须),因此放置好一个数字后,我选择下一行下一列放置另一个数(这里的下一行选取是个循环过程,即到头后自动重新开始)。
如果下一个位置已经有数字,表示这一轮结束,需要选取旁边位置放置数字并开始下一轮。
如此反复直到所有数字放置结束。
n=int(input('please input n:'))p=[[0 for j in range(n) ] for i in range(n)]i=n//2+1j=nfor k in range(1,n*n+1): p[i-1][j-1]=k i=(i+1)%n j=(j+1)%n if p[i-1][j-1]!=0:#已经放置了数字,则修改为同行前一个位置 i=(i-1+n)%n j=(j-2+n)%nprint( "\n".join([ "".join(['%3d'%b for b in a]) for a in p]))
如果你有其他解法,欢迎大家再评论区讨论哦!!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #数独题目生成算法怎么做