永发信息网

用VBA解数独程序

答案:1  悬赏:10  手机版
解决时间 2021-05-08 19:32
哪位大侠能帮忙写一个用VBA解数独程序.100分奉上.好的可再加分!
最佳答案

为方便起见,建名称“数独盘”和“可选数”,分别代表B2:J10和B12:J20两个区域。


用如下VBA程序清空初盘:


Sub 清空初盘()
Dim rag As Range
For Each rag In Range("数独盘")
rag.ClearContents
rag.Font.Bold = False
Next
End Sub
用如下VBA程序把初盘“粗体化”:


Sub 粗体初盘()
Dim rag As Range
For Each rag In Range("数独盘")
If rag.Value = "" Then
rag.Font.Bold = False
Else
rag.Font.Bold = True
End If
Next
End Sub


为建“可选数”表,先用如下程序语句清空“可选数”区域:


Range("可选数").ClearContents '清空可选数
以下程序段,作为解数独的初始化工作的一部分完成如下工作:


在“数独盘”区域仅保留粗体的已知数作为初盘。在“可选数”区域的与“数独盘”已知数对应的单元格,抄录已知数,其他单元格取“123456789”。程序如下:


For Each rag In Range("可选数")
If rag.Offset(-10, 0).Font.Bold Then '“数独盘”中用粗体字表示已知数
rag.Value = rag.Offset(-10, 0).Value '把“数独盘”中的已知数抄录到对应的“可选数”区域中的相应位置
Else
rag.Value = "123456789" '“数独盘”中的未知数在“可选数”区域中的相应位置设置成“123456789”
rag.Offset(-10, 0).Value = "" '“数独盘”中的未知数用空格表示
End If
Next
接下来的初始化工作就是建立对应于初盘的可选数表。这部分工作和以后要讲的用“排除法”解数独题有相似之处。这些相似的工作用“处理确定数”子程序来完成。现在在“可选数”区域,寻找长度为1的数作为确定数,把该单元格置为空格,记下该单元格的行号和列号,由“处理确定数”子程序作相应处理。程序如下:


For Each rag In Range("可选数")
If Len(rag.Value) = 1 Then
qds = rag.Value '已知数作为“确定数”
rag.Value = "" '对应于“确定数”在“可选数”区域设为空格,表示无别的数可选
i% = rag.Row - Range("可选数").Row + 1 '计算“确定数”在“可选数”区域的行号
j% = rag.Column - Range("可选数").Column + 1 '计算“确定数”在“可选数”区域的列号
Call 处理确定数(i%, j%, qds)
End If
Next
待续

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么结婚容易离婚难呢
爱 到底怎么做
怎样给姓梅的女孩起名
在地上做仰卧好还是练臂力棒好
东界河洗车城在哪里啊,我有事要去这个地方
一句关于孝敬的名言警句
我打开一个文件老出错误!!!!急
是不是自己很想跟他在一起就是喜欢他呢?
解梦:梦到已经分手的男朋友给我打电话
监控头没有色彩
什么牌子的台式电脑好看,3000-3500的,希望
平江大酒店地址有知道的么?有点事想过去
求达人给个{一起又看流星雨}电视连续剧下载地
诺基亚5530用wifi上网,总会显示服务器名称无
什么是问问。
推荐资讯
小沈阳今年还会上春晚吗
2009有什么好游戏
如果有师傅没加他在那里看
沈阳航空工业学院航院哪天开学?????
需要一个强大的英文翻译高手!!!!
刘禹锡的石头城千古名句 20分
头发出油太多怎么办
为爱情放弃未来值得吗?
从长治到大同应县自己开车怎么走
“explorer.exe”关闭后怎么重新启动
吸引别人眼球的一句话,何炅曾经说过一句话,
N78的屏幕问题 高手进
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?