ITPub博客

首页 > IT职业 > IT生活 > php数独求解

php数独求解

IT生活 作者:flyingknife 时间:2021-09-09 09:19:53 0 删除 编辑

 


function checksd(&$data, $i ,$j)
{
    if(empty($data)||(empty($i)&&$i!=0)||(empty($j)&&$j!=0))
    {
        echo __FILE__.__LINE__."参数错误";
        return false;
    }
    //判断当前行
    for($m=0; $m    {
        if($data[$i][$j] == $data[$i][$m] && ($m!=$j))
        {    return false;}
    }
    
    //判断列
    for($m=0; $m    {
        if($data[$i][$j] == $data[$m][$j] && ($m!=$i))
        {      return false; }
    }
    $ti  = (floor($i%3)) * 3 + $m;
    $tj  = (floor($j%3)) * 3 + $n;
    
    for($m=0; $m    {
        for($n=0; $n        {   
            if($data[$i][$j] == $data[$ti][$tj] && ($m != $i || $n != $j))
            {      return false;   }
        }
    }
    return true;
}

$initdata = array(
    array(0,0,3,0,0,2,0,4,1),
    array(4,0,1,9,0,0,0,2,6),
    array(0,0,0,4,0,0,9,0,0),
    array(0,3,0,0,0,0,5,1,8),
    array(0,5,9,0,0,0,2,6,0),

    array(2,1,4,0,0,0,0,9,0),
    array(0,0,7,0,0,8,0,0,0),
    array(1,8,0,0,0,9,4,0,7),
    array(9,6,0,7,0,0,1,0,0)
);
suduku($initdata, 0);


function suduku($data, $h)
{
    $temp = array();
    for($m=0; $m    {
        for($n=0; $n        {
            $temp[$m][$n] = $data[$m][$n];
        }
    }
        
    $i = floor($h/9);
    $j = floor($h%9);
    
    if($temp[$i][$j] != 0)
    {
      
        if($h == 80)
        {
            prisd($temp);
        }
        else
        {
           suduku($data, $h+1);
        }
    }
    else
    {
        for($k=1; $k        {
            $temp[$i][$j] = $k;
            $flag  = checksd($temp, $i, $j);
          //  var_dump($flag);
        //    echo  ($h. ' '.$i .' '.$j.' '.$k);
            if($flag)
            {
                if($h == 80)
                    prisd($temp);
                else
                {
                //     echo  ($h. ' '.$i .' '.$j.' '.$k ).' guo
';
                      suduku($temp, $h+1);    
                }
                 $temp[$i][$j] = 0;
            }
             
        }
        
    }
    
    
}


function prisd(&$data)
{
    for($m=0; $m    {
        for($n=0; $n        {
           echo  $data[$m][$n]."  ";
        }
        echo '
';
    }
      echo '
------------------------------
';
}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/393/viewspace-2809526/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-23

  • 博文量
    0
  • 访问量
    464