Jquery暴力解数独

 
var arry= new Array();
var nums= new Array();
var snum;
function numchain()
{
snum=0;
for(var i=0;i<9;i++)
    {
        nums[i]=new Array();
        for(var j=0;j<9;j++)
        {
                 
            if($("#mytb").children().eq(0).children().eq(i).children().eq(j).html()=="")
            {
                nums[i][j]=0;
                arry[snum]=new Array();
                arry[snum][0]=i;
                arry[snum][1]=j;
                snum++;
            }
            else
            {
                nums[i][j]=parseInt($("#mytb").children().eq(0).children().eq(i).children().eq(j).html());
            }
                 
        }
     
     
    }
     
     
}
function fill()
{
for(var i=0;i<9;i++)
    {
        for(var j=0;j<9;j++)
        {
            $("#mytb").children().eq(0).children().eq(i).children().eq(j).html(nums[i][j]);
        }
     
     
    }
     
}
//解数独--------------------------------------------------------------------------------------
function sukudu()
{
numchain();
alert(snum+" cells to be filled.");
for(var i=0;i<snum;i++)
{
    if(check(arry[i][0],arry[i][1],nums[arry[i][0]][arry[i][1]]+1)==0)i=i-2;
    if(i==-2){alert("No solution!");break;}
}
    fill();
}
//--------------------------------------------------------------------------------------------
//获取可用数字
function check(row,column,start)
{
for (var i=start;i<10;i++)
{
if(checkRC(row,column,i)==true && checkS(row,column,i)==true){nums[row][column]=i;return i;}
}
nums[row][column]=0;
return 0;
}
     
     
//行列检查
function checkRC(row,column,value)
{
for (var i=0;i<9;i++)
{
if(nums[row][i]==value)return false;
     
if(nums[i][column]==value)return false;
}
return true;
}
//方块检查
function checkS(row,column,value)
{
for (var i=0;i<3;i++)
{
for(var j=0;j<3;j++)
{
if(nums[parseInt(row/3)*3+i][parseInt(column/3)*3+j]==value)return false;
}
}
<table id="mytb" class="tb"  contenteditable="true"><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>

 

转载于:https://www.cnblogs.com/sky-view/p/3246598.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值