python-backtrack

Habe ich vor kurzem gepostet ein paar Fragen um zu verstehen Rekursion und backtrack, die ich fühlte, bekam ich sofort etwas, und versuchte, einen test schreiben, habe ich das sudoku zu lösen problem, aber wenn ich Schreibe den code in ein anderes format, wird der code stucks für eine Weile aus und gibt False zurück, der angibt, gibt es keine Lösung für dieses problem.

grid ist ein 9x9 Liste von Listen, wenn Liste[i][j] null ist, dann bedeutet es, es muss ausgefüllt werden.

Hier ist der code, der das problem gelöst:

def correct_solve(grid):

    # if there is no more zeros
    if found_solution(grid):
        return True

    for row in xrange(9):
        for col in xrange(9):
            if grid[row][col] == 0:
                for num in xrange(1, 10):
                    grid[row][col] = num
                    if check_sudoku(grid) == True:
                        if correct_solve(grid) == True:
                            return True
                # there are no numbers which could make
                # a valid solution, so backtrack
                grid[row][col] = 0
                return False

Und hier ist eine weitere Funktion, die ich zu lösen versucht, das problem in einer anderen Weise, aber er scheiterte, und ich konnte nicht herausfinden, wo das problem ist

def buggy_solve(grid, col):

    # if there is no more zeros
    if found_solution(grid):
        return True

    # if the col is over 8, make it to 0
    if col > 8:
        col = 0

    for row in xrange(9):
        if grid[row][col] == 0:
            for num in xrange(1, 10):
                grid[row][col] = num
                if check_sudoku(grid) == True:
                    # I tend to move to the next cell, and it seems that
                    # this is correct.
                    if buggy_solve(grid, col + 1) == True:
                        return True

            # if there are no valid solutions, backtrack.
            grid[row][col] = 0
            return False

Ich habe versucht, um das Programm zu Debuggen, und hat nicht gefunden, was nützlich ist, btw ist es eine gute Praxis, um debug ein Stück Rekursion code?

EDIT:

Hier ist die matrix, die ich verwende, um zu testen:

easy = [[2,9,0,0,0,0,0,7,0],
        [3,0,6,0,0,8,4,0,0],
        [8,0,0,0,4,0,0,0,2],
        [0,2,0,0,3,1,0,0,7],
        [0,0,0,0,8,0,0,0,0],
        [1,0,0,9,5,0,0,6,0],
        [7,0,0,0,9,0,0,0,1],
        [0,0,1,2,0,0,3,0,6],
        [0,3,0,0,0,0,0,5,9]]
InformationsquelleAutor shengy | 2012-07-18
Schreibe einen Kommentar