首页 > 编程语言 >回溯算法_解数独2

回溯算法_解数独2

时间:2022-12-05 10:44:46浏览次数:26  
标签:Function solveSudokuHelper isValidSudoku Next 算法 board 回溯 End 解数

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

相关文章

  • 排序算法:快速排序
    简介快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排......
  • 排序算法:比较排序
    算法简介:排序排序是一个非常经典的问题,它以特定顺序(递增、非递减(递增或扁平))对数组(或列表)的项目(可以比较,例如整数、浮点数、字符串等)进行重新排序)、递减、非递增(递减或平......
  • 排序算法:非比较排序
    堆排序voidAdjustDown(int*arr,intsz,introot)//向下调整{ intparent=root; intchild=root*2+1; while(child<sz) { if(child+1<sz&&ar......
  • 排序算法:归并排序
    递归实现void_MergeSort(int*arr,intleft,intright,int*tmp){ if(left>=right) return; intmid=left+(right-left)/2; _MergeSort(arr,left,......
  • 卡尔曼滤波之最优状态估计和最优状态估计算法
    1.最优状态估计情景1:假设一个一个比赛中,不同队伍的自动驾驶汽车使用GPS定位,在100种不同的地形上各行驶1公里。每次都尽可能停在终点。然后计算每只队伍的平均最终......
  • 页式存储管理--两种置换算法的实现
    一.实验目的1.了解虚拟存储技术,通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。2.掌握FIFO和LRU等置换算法,加强对地址转换过程的了解。二.实验内容......
  • sm-crypto密码算法库
    一、环境配置在之前的node.js库配置中,我们已经配置好了node和npm,再次检查配置情况node-vnpm-vnpminstall--saveminiprogram-sm-crypto二、进入工作目录/usr/l......
  • 第二章 算法基础
    第2章算法基础第二周记于2022/12/4如何描述算法使用一致性符号来分析算法的运算时间通过归并排序来学习分而治之方法插入排序......
  • 如何用JDK优雅的实现几个算法
    今天给大家介绍下八股文中的两个重要成员,LinkedHashMap和TreeMap。 这两者都实现了Map接口,也经常会在面试中被拿来与HashMap比较。 到底它们能使用哪些魔法呢,接下来......
  • Node.js实现国密算法
    一、node.js环境安装1去官网下载压缩包,并放置到/usr/local/bin文件夹下2进行环境变量配置vim/etc/profile在环境变量文件的末尾添加exportNODEJS=/usr/local/b......