亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

回溯創建正方形

回溯創建正方形

慕容708150 2023-02-22 15:49:49
a = []def make_squares(arr, length, nums):    if not nums:        print(arr)        a.append(arr)        return    r = 0    while r < len(arr) and len(arr[r]) == length:        r += 1    for i in nums:        nums.remove(i)        arr[r].append(i)        make_squares(arr, length, nums)        nums.append(i)        arr[r] = arr[r][:-1]make_squares([[] for i in range(3)], 3, [i+1 for i in range(3**2)])print(a)我正在嘗試使用上面的代碼創建nxn矩陣,每個矩陣都有一個 numbers 的排列i+1...n^2。我已經打印了每個附加到 a 的矩陣,它們看起來是正確的,但是當我最后打印 a 時,我得到了[[[], [], []], [[], [], []], ...]。這對我來說沒有任何意義。預期的結果是[[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 9, 8]], ...]
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

順序可能與您預期的結果不同,但這對標準庫itertools模塊來說是個竅門:


import itertools


def make_squares(w):

    size = w * w

    for perm in itertools.permutations(range(1, size + 1)):

        # "grouper" from the itertools recipe list

        yield list(itertools.zip_longest(*[iter(perm)] * w))


for square in make_squares(3):

    print(square)

印刷


[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

[(1, 2, 3), (4, 5, 6), (7, 9, 8)]

[(1, 2, 3), (4, 5, 6), (8, 7, 9)]

[(1, 2, 3), (4, 5, 6), (8, 9, 7)]

[(1, 2, 3), (4, 5, 6), (9, 7, 8)]

[(1, 2, 3), (4, 5, 6), (9, 8, 7)]

[(1, 2, 3), (4, 5, 7), (6, 8, 9)]

[(1, 2, 3), (4, 5, 7), (6, 9, 8)]

[(1, 2, 3), (4, 5, 7), (8, 6, 9)]

[(1, 2, 3), (4, 5, 7), (8, 9, 6)]

[(1, 2, 3), (4, 5, 7), (9, 6, 8)]

[(1, 2, 3), (4, 5, 7), (9, 8, 6)]

[(1, 2, 3), (4, 5, 8), (6, 7, 9)]

[(1, 2, 3), (4, 5, 8), (6, 9, 7)]

[(1, 2, 3), (4, 5, 8), (7, 6, 9)]

...


查看完整回答
反對 回復 2023-02-22
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號