问题:在4×4的空格中填上1,2,3,4四个数字,使得每行每列数字不重复,把所有结果显示出来。
本人小白一个枚,自学python,刚好想到了这个以前觉得头疼的题,就自己写了代码试试,但是感觉不怎么好,希望大神能帮我看看怎么优化比较好
例如:
[3, 1, 4, 2]
[2, 4, 3, 1]
[1, 3, 2, 4]
[4, 2, 1, 3]
下面是代码:
from addict import Dict
n, m = [1,2,3,4], []
w = Dict()
for i in range(4):
for j in range(3):
nl = [1,2,3,4]
del nl[i]
for k in range(2):
nll = [1,2,3,4]
nlll = [1,2,3,4]
del nll[i]
del nll[j]
del nlll[i]
del nlll[j]
del nlll[k]
w[n[i]][nl[j]][nll[k]] = nlll[0]
m.append([n[i],nl[j],nll[k],nlll[0]])
w = dict(w)
p = 0
for a in m:
for b in m:
if b[0] in w[a[0]] and b[1] in w[a[1]] and b[2] in w[a[2]] and b[3] in w[a[3]]:
for c in m:
if c[0] in w[a[0]][b[0]] and c[1] in w[a[1]][b[1]] and c[2] in w[a[2]][b[2]] and c[3] in w[a[3]][b[3]]:
d = [w[a[0]][b[0]][c[0]],w[a[1]][b[1]][c[1]],w[a[2]][b[2]][c[2]],w[a[3]][b[3]][c[3]],]
e = [a,b,c,d]
p += 1
print(p,':',e)
print('****************************')
能力有限,只能想到这种方法,希望大神能指点一下,拜托