Как работает Backtracking в Python - PullRequest
1 голос
/ 24 февраля 2020

Я придумываю этот фрагмент кода на YouTube. Я использую это, чтобы решить судоку, выполняя задний ход.

import pandas as pd
import numpy as np


raw = pd.read_csv(r'C:\Users\Administrator\Dropbox\Python_Learning\debaisudoku.csv', header = None)
sudoku = np.nan_to_num(raw)

def possible(x,y,n):
    # global sudoku
    for i in range(0,9):
        if sudoku[i][y] == n:
            return False
    for i in range(0,9):
        if sudoku[x][i] == n:
            return False
        x0 = (x//3) * 3
        y0 = (y//3) * 3
    for i in range(0,3):
        for j in range(0,3):
            if sudoku[x0+i][y0+j] == n:
                return False
    return True

def solve():
    # global sudoku
    for x in range(9):
        for y in range(9):
            if sudoku[x][y] == 0:
                for n in range(1,10):
                    if possible(x,y,n):
                        sudoku[x][y] = n
                        if solve(): return True
                    sudoku[x][y] = 0
                return False
    print(sudoku)
solve()

Все абсолютно нормально, и я понимаю код, за исключением следующих строк кода:

    if possible(x,y,n):
        sudoku[x][y] = n
        if solve(): return True
    sudoku[x][y] = 0
return False

Как Python Запускается, L oop и запоминает позицию, затем продолжает считать последний использованный номер? Кстати, если возможно, пожалуйста, покажите мне, как выполнить Backtracking в VBA. Я пытался перейти, если условие, но ничего не работает.

Большое спасибо, я ценю любые ответы.

...