龙空技术网

「答案」python每日一题20201122(数独)

编程皮皮糖 81

前言:

如今我们对“数独题目生成算法怎么做”大致比较着重,咱们都需要学习一些“数独题目生成算法怎么做”的相关资讯。那么小编同时在网摘上搜集了一些关于“数独题目生成算法怎么做””的相关资讯,希望大家能喜欢,朋友们快快来了解一下吧!

输入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]))

如果你有其他解法,欢迎大家再评论区讨论哦!!

标签: #数独题目生成算法怎么做