array = [1,2,3,4,5,6,7,8,9]
sudoku = int [][]
puzzle = 9
columns = map []
units = map []
unit_l = 3
check_puzzle()
def strike_numbers(line, line_num, columns, units, unit_l):
count = 0
for n in line:
unit = ceil(n / unit_l) + ceil(line_num / unit_l)
if units[unit].contains(n):
return columns, units, 1
units[unit].add(n)
if columns[count].contains(n):
return columns, units, 1
columns[count].add(n)
line.remove(n)
return columns, units, line.length
def check_puzzle(columns, sudoku, puzzle, array, units):
for (i=0;i< puzzle;i++):
columns, units, left_over = strike_numbers(sudoku[i], i, columns, units)
if (left_over > 0): return false
没有经过彻底的检查,仅凭记忆,这应该可以(需要进行一些调试),同时只循环两次。时间复杂度为O(n^2),而不是O(3(n^2))。