1)当我们拿到一个题目时,首先会根据已经知道的条件,进行数据的初步整理和分析。
相当于填写出9宫格里,所有的“确定项”,以及标记“可能选项”。
function refreshStat()
2)此后,思考会进入 猜测/验证 的循环阶段。
在9宫格中,可以对于“可能选项”进行尝试,验证是否违背现有条件。
每一个新的分支,最后的结果无非是两种,答案/出错。
复制代码 代码如下:
while(true){
var a=setOne();
var b=refreshStat();
if(!a||b){ //如果 a==false 或者 b==ture,则可以跳出循环
break;
}
}
实际人脑思考的过程,也是要先遍历选项较少的分支。
所以,程序实现上也是 确定点/2叉分支/3叉分支/....
3)当所有的路径搜索下来,答案不是唯一的情况,是和数独游戏的宗旨相悖的。
以下部分是全部代码,为方便阅读,调试信息未删除。
复制代码 代码如下:
<html>
<head>
<title>数独解题程序</title>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<script>
function keygo(evt,obj){
key = window .event?evt.keyCode:evt.which;
var next=obj.tabIndex ;
var inputs=document.getElementsByTagName("input");
if (key==38){//↑
if (next -9>=0 ) {
inputs[next-9].select()
}
}
if (key==40){//↓
if (next +9<81 ) {
inputs[next+9].select()
}
}
if (key==37){//←
if (next -1>=0 ) {
inputs[next-1].select()
}
}
if (key==39){//→
if(next+1<81)inputs[next+1].select();
}
}
</script>
</head>
<body>
<div></div><input type=button value="计算">
<input type=button value="清空">
<br><span><textarea cols="19" rows="10">004502006
000000005
002014007
008000012
070080050
930020700
600190200
020000000
300208500</textarea></span>
<input type=button value="粘贴" >可以文本拷贝到下框中后点粘贴,从左到右从上往下的81个数字序列,未填为0,中间非数字字符将忽略<br>
<span></span><br><span></span><span></span>
<script>
var maxRow =9;
var maxCol = 9;
var strTbody = ["<table><tbody>"];
for(var i = 0; i < maxRow; i++){
strTbody.push("<tr>");
for(var j = 0; j < maxCol; j++){
strTbody.push("<td ><input tabindex='"+(i*9+j)
+"'onclick='check(this);' onKeyUp='return keygo(event,this)'type='text'name='n"+(i*9+j)+"'value='"+i+j+"' ></td>");
}
strTbody.push("</tr>");
}
strTbody.push("</tbody></table>");
var sTbody = ["<table><tbody>"];
for(var i = 0; i < maxRow; i++){
sTbody.push("<tr>");
for(var j = 0; j < maxCol; j++){
sTbody.push("<td><div name='div"+i+j+"' ></div></td>");
}
sTbody.push("</tr>");
}
sTbody.push("</tbody></table>");
var obj = document.getElementById("sodukuTable");
obj.innerHTML = strTbody.join("");
var obj2 = document.getElementById("statusDiv");
var grid=[
[5, 7, 0, 1, 2, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 6, 7, 0, 0, 0, 8, 0],
[3, 0, 4, 0, 0, 9, 0, 7, 0],
[0, 2, 0, 0, 7, 0, 0, 5, 0],
[0, 1, 0, 3, 0, 0, 9, 0, 2],
[0, 8, 0, 0, 0, 2, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 4, 0, 6, 3]];
var candidatNum=[];
var columns=[];
var rows=[];
var blook=[];
var papers=0;
var discards=0;
var success=false;
var steps = new Array();
var log1 = document.getElementById("statusDiv");