侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

PHP实现的数独求解问题示例

php  /  管理员 发布于 7年前   336

本文实例讲述了PHP实现的数独求解问题。分享给大家供大家参考,具体如下:

一、数独问题描述:

对于给出的数字二维数组,要求每行每列的数字不能重复。

二、实现代码:

clear();    } else {      $this->matrix = $arr;    }  }  function clear() {    for($i=0; $i<9; $i++) {      for($j=0; $j<9; $j++) {        $this->matrix[$i][$j] = array();        for ($k = 1; $k <= 9; $k++) {          $this->matrix[$i][$j][$k] = $k;        }      }    }  }  function setCell($row, $col, $value){    $this->matrix[$row][$col] = array($value => $value);    //row    for($i = 0; $i < 9; $i++){      if($i != $col){        if(! $this->removeValue($row, $i, $value)) {          return false;        }      }    }    //col    for($i = 0; $i < 9; $i++){      if($i != $row){        if(! $this->removeValue($i, $col, $value)) {          return false;        }      }    }    //square    $rs=intval($row / 3) * 3;    $cs=intval($col / 3) * 3;    for($i = $rs; $i < $rs + 3; $i++){      for($j = $cs; $j < $cs + 3; $j++){        if($i != $row && $j != $col){          if(! $this->removeValue($i, $j, $value))return false;        }      }    }    return true;  }  function removeValue($row, $col, $value) {    $count = count($this->matrix[$row][$col]);    if($count == 1){      $ret = !isset($this->matrix[$row][$col][$value]);      return $ret;    }    if (isset($this->matrix[$row][$col][$value])) {      unset($this->matrix[$row][$col][$value]);      if($count - 1 == 1) {        return $this->setCell($row, $col, current($this->matrix[$row][$col]));      }    }    return true;  }  function set($arr) {    for ($i = 0; $i < 9; $i++) {      for ($j = 0; $j < 9; $j++) {        if ($arr[$i][$j] > 0) {          $this->setCell($i, $j, $arr[$i][$j]);        }      }    }  }  function dump() {    for($i = 0; $i < 9; $i++){      for($j = 0; $j < 9; $j++){        $c = count($this->matrix[$i][$j]);        if($c == 1){          echo " ".current($this->matrix[$i][$j])." ";        } else {          echo "(".$c.")";        }      }      echo "\n";    }    echo "\n";  }  function dumpAll() {    for($i = 0; $i < 9; $i++){      for($j = 0; $j < 9; $j++){        echo implode('', $this->matrix[$i][$j]), "\t";      }      echo "\n";    }    echo "\n";  }  function calc($data) {    $this->clear();    $this->set($data);    $this->_calc();    $this->dump();  }  function _calc() {    for($i = 0; $i < 9; $i++){      for($j = 0; $j < 9; $j++){        if(count($this->matrix[$i][$j]) == 1) {          continue;        }        foreach($this->matrix[$i][$j] as $v){          $flag = false;          $t = new Sudoku($this->matrix);          if(!$t->setCell($i, $j, $v)){continue;          }          if(!$t->_calc()){continue;          }          $this->matrix = $t->matrix;          return true;        }        return false;      }    }    return true;  }}$sd=new Sudoku;$sd->calc(array(array(0,5,0,0,0,6,0,9,0),array(0,4,7,0,8,2,6,0,0),array(0,8,0,0,0,7,0,5,2),array(7,0,1,0,3,4,0,0,6),array(0,3,0,0,2,0,0,8,0),array(2,0,0,0,0,1,9,0,4),array(4,7,0,1,0,0,0,6,0),array(0,0,9,4,6,0,3,7,0),array(0,1,0,2,0,0,0,4,0),));$sd->calc(array(array(1,0,0,0,0,6,9,0,0),array(0,0,0,9,0,0,0,0,5),array(2,0,0,1,0,0,0,0,3),array(0,0,5,3,0,7,0,2,0),array(3,0,0,6,0,0,0,0,1),array(0,1,0,4,0,0,8,0,0),array(9,0,0,0,0,2,0,0,7),array(5,0,0,0,0,9,0,0,0),array(0,0,3,7,0,0,0,0,4),));$sd->calc(array(array(7,0,0,1,0,0,0,0,5),array(0,0,6,0,4,0,0,8,0),array(0,0,1,0,0,0,0,0,0),array(0,6,0,0,8,0,0,0,3),array(0,8,0,0,0,9,0,7,0),array(1,0,0,0,0,0,0,5,0),array(0,0,0,0,0,0,9,0,0),array(0,4,0,0,3,0,1,0,0),array(9,0,0,0,0,7,0,0,2),));$sd->calc(array(array(0,5,0,0,0,0,0,2,0),array(0,0,3,1,0,0,5,0,0),array(0,0,6,0,0,8,0,0,0),array(6,0,0,0,0,0,0,1,0),array(8,0,0,6,0,0,0,0,4),array(0,3,0,0,0,9,0,0,7),array(0,0,0,5,0,0,3,0,0),array(0,0,8,0,0,6,9,0,0),array(0,9,0,0,0,0,0,7,0),));?>

运行结果如下:

 1 5 2 3 4 6 7 9 8  9 4 7 5 8 2 6 1 3  3 8 6 9 1 7 4 5 2  7 9 1 8 3 4 5 2 6  5 3 4 6 2 9 1 8 7  2 6 8 7 5 1 9 3 4  4 7 3 1 9 8 2 6 5  8 2 9 4 6 5 3 7 1  6 1 5 2 7 3 8 4 9  1 3 7 2 5 6 9 4 8  4 6 8 9 7 3 2 1 5  2 5 9 1 8 4 6 7 3  6 8 5 3 1 7 4 2 9  3 9 4 6 2 8 7 5 1  7 1 2 4 9 5 8 3 6  9 4 6 5 3 2 1 8 7  5 7 1 8 4 9 3 6 2  8 2 3 7 6 1 5 9 4  7 3 8 1 9 6 4 2 5  2 9 6 3 4 5 7 8 1  4 5 1 2 7 8 3 9 6  5 6 9 7 8 4 2 1 3  3 8 2 5 1 9 6 7 4  1 7 4 6 2 3 8 5 9  6 2 7 4 5 1 9 3 8  8 4 5 9 3 2 1 6 7  9 1 3 8 6 7 5 4 2  9 5 1 3 6 7 4 2 8  7 8 3 1 4 2 5 6 9  2 4 6 9 5 8 7 3 1  6 2 9 4 7 5 8 1 3  8 7 5 6 1 3 2 9 4  1 3 4 2 8 9 6 5 7  4 6 7 5 9 1 3 8 2  3 1 8 7 2 6 9 4 5  5 9 2 8 3 4 1 7 6 

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php程序设计算法总结》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • Java实现解数独的小程序
  • JavaScript遍历求解数独问题的主要思路小结
  • python实现数独算法实例
  • Go语言实现的最简单数独解法
  • c++递归解数独方法示例
  • JQuery开发的数独游戏代码
  • PHP实现的方程求解示例分析
  • PHP经典算法集锦【经典收藏】
  • php编写的抽奖程序中奖概率算法
  • php 大数据量及海量数据处理算法总结
  • 适用于抽奖程序、随机广告的PHP概率算法实例
  • php中最简单的字符串匹配算法
  • php数字转汉字代码(算法)


  • 上一条:
    php+resumablejs实现的分块上传 断点续传功能示例
    下一条:
    PHP使用finfo_file()函数检测上传图片类型的实现方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客