Private Function solveSudokuHelper(board) As Boolean For i = 1 To 9 For j = 1 To 9 If (board(i, j) = ".") Then For k = 1 To 9 If isValidSudoku(i, j, k, board) Then board(i, j) = k If solveSudokuHelper(board) Then solveSudokuHelper = True: Exit Function board(i, j) = "." End If Next solveSudokuHelper = False: Exit Function End If Next Next solveSudokuHelper = True End Function Sub h21_回溯算法_解数独2() '数组起始下标为1 tms = Timer '程序起始时间 With Sheet1 .Range("m12").CurrentRegion.ClearContents ar = .Range("a12").CurrentRegion Call solveSudokuHelper(ar) .Range("m12").Resize(UBound(ar), UBound(ar, 2)) = ar End With MsgBox Format(Timer - tms, "0.0s ") & s End Sub Private Function isValidSudoku(row, col, Val, board) As Boolean For i = 1 To 9 If board(row, i) = Val Then isValidSudoku = False: Exit Function Next For j = 1 To 9 If board(j, col) = Val Then isValidSudoku = False: Exit Function Next startrow = getInt(row / 3) * 3 startcol = getInt(col / 3) * 3 For i = startrow + 1 To startrow + 3 For j = startcol + 1 To startcol + 3 If board(i, j) = Val Then isValidSudoku = False: Exit Function Next Next isValidSudoku = True End Function Function getInt(x) If x <= 1 Then x = 0 ElseIf x > 1 And x <= 2 Then x = 1 ElseIf x > 2 And x <= 3 Then x = 2 End If getInt = x End Function
标签:Function,solveSudokuHelper,isValidSudoku,Next,算法,board,回溯,End,解数 From: https://www.cnblogs.com/eyunkeji/p/16951694.html