呵呵呵175 2021-12-16 19:38 采纳率: 66.7%
浏览 25
已结题

在4×4的空格中填上1234四个数字

问题:在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('****************************')

能力有限,只能想到这种方法,希望大神能指点一下,拜托

  • 写回答

2条回答 默认 最新

  • 索利亚噶通 2021-12-16 20:11
    关注

    可以用回溯法, 没想到输出来的结果这么多个

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 12月16日

悬赏问题

  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?