第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

無法使用回溯獲得數(shù)獨解算器的輸出

無法使用回溯獲得數(shù)獨解算器的輸出

繁華開滿天機(jī) 2023-03-08 10:00:35
我開始使用回溯和遞歸來研究數(shù)獨求解器。我無法打印已解決的數(shù)獨。我已經(jīng)測試了該possible(y,x,n)方法并且它有效。該程序完成Process finished with exit code 0但沒有打印出已解決的數(shù)獨謎題。我使用帶有 PyCharm Community Edition 2020.1.3 的 python 3.7 作為我的 IDE。import numpy as npgrid = [[5, 3, 0, 0, 7, 0, 0, 0, 0],        [6, 0, 0, 1, 5, 9, 0, 0, 0],        [0, 9, 8, 0, 0, 0, 0, 6, 0],        [8, 0, 0, 0, 6, 0, 0, 0, 3],        [4, 0, 0, 8, 0, 3, 0, 0, 1],        [7, 0, 0, 0, 2, 0, 0, 0, 6],        [0, 6, 0, 0, 0, 0, 2, 8, 0],        [0, 0, 0, 4, 1, 9, 0, 0, 5],        [0, 0, 0, 0, 8, 0, 0, 7, 9]]def possible(y, x, n):    global grid    for i in range(9):        if grid[y][i] == n:            return False    for i in range(9):        if grid[x][i] == n:            return False    x0 = (x // 3) * 3    y0 = (y // 3) * 3    for i in range(3):        for j in range(3):            if grid[y0 + i][x0 + j] == n:                return False    return Truedef solve():    global grid    for y in range(9):        for x in range(9):            if grid[y][x] == 0:                for n in range(1, 10):                    if possible(y, x, n):                        grid[y][x] = n                        solve()                        grid[y][x] = 0                return    print(np.matrix(grid))if __name__ == "__main__":    solve()
查看完整描述

1 回答

?
夢里花落0921

TA貢獻(xiàn)1772條經(jīng)驗 獲得超6個贊

我已經(jīng)測試了 possible(y,x,n) 方法并且它有效。


但它壞了:


if grid[x][i] == n:

應(yīng)該:


if grid[i][x] == n:

下一期是您要解決的難題,已解決!第六列有兩個九:


[., ., ., ., ., 0, ., ., .]

[., ., ., ., ., 9, ., ., .]

[., ., ., ., ., 0, ., ., .]

[., ., ., ., ., 0, ., ., .]

[., ., ., ., ., 3, ., ., .]

[., ., ., ., ., 0, ., ., .]

[., ., ., ., ., 0, ., ., .]

[., ., ., ., ., 9, ., ., .]

[., ., ., ., ., 0, ., ., .]

您可能想在您的函數(shù)集中添加一個拼圖驗證器。在我下面的示例中,我使用了一個不同的可解決的難題,否則很難調(diào)試您的代碼!


最后,你的solve()功能被承保了。它不應(yīng)該打印拼圖,而是返回一個布爾值,指示它是否解決了拼圖。然后將此結(jié)果用于您的回溯,并在最后確定難題是否可解決。


最后,仔細(xì)閱讀關(guān)鍵字global,您使用的不正確。


import numpy as np


def possible(y, x, n):

    for i in range(9):

        if grid[y][i] == n:

            return False


    for i in range(9):

        if grid[i][x] == n:

            return False


    x0 = (x // 3) * 3

    y0 = (y // 3) * 3


    for i in range(3):

        for j in range(3):

            if grid[y0 + i][x0 + j] == n:

                return False


    return True


def solve():

    for y in range(9):

        for x in range(9):

            if grid[y][x] == 0:

                for n in range(1, 10):

                    if possible(y, x, n):

                        grid[y][x] = n  # tentatively try n


                        solved = solve()

                        if solved:

                            return True  # solved recursively!


                        grid[y][x] = 0  # undo attempt at n

                

                return False  # no solution for this square


    return True  # no 0's to resolve, puzzle solved!


if __name__ == "__main__":

    grid = [

        [6, 5, 8, 0, 0, 0, 0, 7, 0],

        [0, 7, 0, 0, 5, 0, 8, 0, 0],

        [0, 3, 9, 0, 0, 0, 5, 4, 0],

        [0, 0, 2, 6, 0, 5, 0, 0, 7],

        [0, 6, 0, 9, 7, 4, 0, 0, 0],

        [7, 0, 0, 3, 0, 0, 6, 0, 0],

        [0, 4, 6, 0, 0, 0, 2, 5, 0],

        [0, 0, 7, 0, 6, 0, 0, 0, 0],

        [0, 0, 0, 0, 0, 0, 7, 6, 8]

    ]


    if solve():

        print(np.matrix(grid))

    else:

        print("No solution!")

輸出


> python3 test.py

[[6 5 8 1 4 3 9 7 2]

 [4 7 1 2 5 9 8 3 6]

 [2 3 9 7 8 6 5 4 1]

 [3 9 2 6 1 5 4 8 7]

 [8 6 5 9 7 4 1 2 3]

 [7 1 4 3 2 8 6 9 5]

 [1 4 6 8 3 7 2 5 9]

 [9 8 7 5 6 2 3 1 4]

 [5 2 3 4 9 1 7 6 8]]


查看完整回答
反對 回復(fù) 2023-03-08
  • 1 回答
  • 0 關(guān)注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號