import time # Das Sudoku-Startfeld start = [ [0, 8, 0, 0, 2, 0, 5, 6, 0], [0, 0, 0, 1, 0, 0, 0, 0, 7], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 5, 0, 0, 9, 0, 4, 0, 8], [0, 0, 7, 8, 0, 0, 0, 0, 3], [0, 9, 0, 0, 1, 0, 0, 5, 0], [2, 0, 4, 0, 0, 0, 8, 0, 0], [0, 6, 0, 0, 8, 5, 0, 0, 0], [0, 0, 0, 2, 0, 0, 1, 0, 0] ] def isfine(feld, x, y): # Doppelte Zahl in Zeile oder Spalte prüfen for yi in range(9): if yi != y and feld[x][yi] == feld[x][y]: return False for xi in range(9): if xi != x and feld[xi][y] == feld[x][y]: return False # Neuner-Kästchen-Test x1 = (x // 3) * 3 y1 = (y // 3) * 3 for xk in range(x1, x1 + 3): for yk in range(y1, y1 + 3): if (xk != x or yk != y) and feld[xk][yk] == feld[x][y]: return False return True def nextone(feld, x, y): if y == 9: y = 0 x += 1 if x == 9: return True if feld[x][y] > 0: if not isfine(feld, x, y): return False return nextone(feld, x, y + 1) else: for feld[x][y] in range(1, 10): if not isfine(feld, x, y): continue if nextone(feld, x, y + 1): return True feld[x][y] = 0 return False def main(): tstart = time.time() if nextone(start, 0, 0): for row in start: print(row) else: print("Nope!") time1 = time.time() print(f"{tstart} - {time1} * {time.CLOCKS_PER_SEC}") if __name__ == "__main__": main()