我想写一个数独计算器,但不知道应怎样写计算部分,收集数字部分已经写好了,不一定要完整的代码,求那位给我个思路,谢谢。
其他部分代码如下Option Explicit
Dim Num(1 To 9, 1 To 9, 1 To 9) As Integer, Able(1 To 9, 1 To 9, 1 To 9) As Boolean
Dim Out(1 To 9) As Integer  ‘用来确定有几个这个数
'找最多的数
Function Most(a) As Integer
Dim i As Integer, t As Integer
    For i = 1 To 8
        If Out(i) >= t Then t = i
    Next i
Most = t
End FunctionPrivate Sub CmdOk_Click()
Dim i As Integer, j As Integer, k As Integer
Dim X As Integer, Y As Integer, Z As Integer
'变量清零
    For i = 1 To 9
        Out(i) = 0
        For j = 1 To 9
            For k = 1 To 9
                Num(i, j, k) = 0
                Able(i, j, k) = False
            Next k
        Next j
    Next i
'从Num读值,并设置Able
    For i = 1 To 81
    X = i Mod 9: Y = i \ 9 + 1
    If X = 0 Then X = 9
    If Y = 10 Then Y = 9
    Select Case X
        Case 1 To 3
            If Y <= 3 Then Z = 1
            If Y >= 4 And Y <= 6 Then Z = 4
            If Y >= 7 Then Z = 7
        Case 4 To 6
            If Y <= 3 Then Z = 2
            If Y >= 4 And Y <= 6 Then Z = 5
            If Y >= 7 Then Z = 8
        Case 7 To 9
            If Y <= 3 Then Z = 3
            If Y >= 4 And Y <= 6 Then Z = 6
            If Y >= 7 Then Z = 9
    End Select
    Num(X, Y, Z) = Val(NumIn(i).Text)
    Able(X, Y, Z) = True
    If Num(X, Y, Z) <> 0 Then
        Able(X, Y, Z) = False
        Out(Num(X, Y, Z)) = Out(Num(X, Y, Z)) + 1
    End If
    Next i
'计算
Most (1)
End SubPrivate Sub Form_Load()
'以下用来产生格子
Dim MyTop As Integer, MyLeft As Integer                       'MyTop,MyLeft
Dim i As Integer, j As Integer, k As Integer, n As Integer                  'i,j,k
MyTop = 200
For i = 1 To 9
   MyLeft = 200
   For j = 1 To 9
      k = (i - 1) * 9 + j
      Load NumIn(k)
      NumIn(k).Text = NumIn(0).Text
            For n = 1 To 9
                NumIn(k).AddItem (Str(n))
            Next n
      NumIn(k).Top = MyTop
      NumIn(k).Left = MyLeft
      NumIn(k).Visible = True
      NumIn(k).Enabled = True
      NumIn(k).Locked = False
      MyLeft = MyLeft + 600
   Next j
MyTop = MyTop + 500
Next i
End Sub这有一点数独的简介,大家可以看一下
数独的游戏规则很简单,9x9个格子里,已有若干数字,其它宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字,使得每一行与每一列都有1到9的数字,每个小九宫格里也有1到9的数字,并且一个数字在每个行列及每个小九宫格里都只能出现一次。

解决方案 »

  1.   

    用Excel.VBA比较容易做,我就自己做了一个,如果你要可以给你,因为在Excel中有直接计算每行中一个数字的个数的函数,直接就可以用,所以比较容易做。我的思路是:先设计一个计算个数的函数,然后循环往空格里填数,计算个数,若个数大于1则下一循环,直到全部找到为止
      

  2.   

    计算部分很复杂。最直观的思路,就是有条件的回溯穷举来实现,不过效率很低。我见过这个问题最漂亮的解决办法是用Knuth的DLX算法,算法具有通用性且十分精彩。楼主可以去搜索一下“DLX + 数独”,有现成的代码可以照着改写。不过单纯看代码的话很难搞清楚思路,建议你还是先看那篇论文《Dancing Links》。
      

  3.   

    求2楼用excel.vba做的东西,邮箱[email protected]