呵呵呵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 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号