首页 > 数独 php

数独 php

 

数独求解程序 php版

 
转载请注明出处:http://xiezhenye.com/2008/06/%e6%95%b0%e7%8b%ac%e6%b1%82%e8%a7%a3%e7%a8%8b%e5%ba%8f-php%e7%89%88.html


1
php 2 class Sudoku { 3 var $matrix; 4 5 function __construct($arr = null) { 6 if ($arr == null) { 7 $this->clear(); 8 } else { 9 $this->matrix = $arr; 10 } 11 } 12 13 function clear() { 14 for($i=0; $i<9; $i++) { 15 for($j=0; $j<9; $j++) { 16 $this->matrix[$i][$j] = array(); 17 for ($k = 1; $k <= 9; $k++) { 18 $this->matrix[$i][$j][$k] = $k; 19 } 20 } 21 } 22 } 23 24 function setCell($row, $col, $value){ 25 $this->matrix[$row][$col] = array($value => $value); 26 //row 27 for($i = 0; $i < 9; $i++){ 28 if($i != $col){ 29 if(! $this->removeValue($row, $i, $value)) { 30 return false; 31 } 32 } 33 } 34 //col 35 for($i = 0; $i < 9; $i++){ 36 if($i != $row){ 37 if(! $this->removeValue($i, $col, $value)) { 38 return false; 39 } 40 } 41 } 42 //square 43 $rs=intval($row / 3) * 3; 44 $cs=intval($col / 3) * 3; 45 46 for($i = $rs; $i < $rs + 3; $i++){ 47 for($j = $cs; $j < $cs + 3; $j++){ 48 if($i != $row && $j != $col){ 49 if(! $this->removeValue($i, $j, $value)) 50 return false; 51 } 52 } 53 } 54 return true; 55 } 56 57 function removeValue($row, $col, $value) { 58 $count = count($this->matrix[$row][$col]); 59 if($count == 1){ 60 $ret = !isset($this->matrix[$row][$col][$value]); 61 return $ret; 62 } 63 if (isset($this->matrix[$row][$col][$value])) { 64 unset($this->matrix[$row][$col][$value]); 65 if($count - 1 == 1) { 66 return $this->setCell($row, $col, current($this->matrix[$row][$col])); 67 } 68 } 69 return true; 70 } 71 72 function set($arr) { 73 for ($i = 0; $i < 9; $i++) { 74 for ($j = 0; $j < 9; $j++) { 75 if ($arr[$i][$j] > 0) { 76 $this->setCell($i, $j, $arr[$i][$j]); 77 } 78 } 79 } 80 } 81 82 function dump() { 83 for($i = 0; $i < 9; $i++){ 84 for($j = 0; $j < 9; $j++){ 85 $c = count($this->matrix[$i][$j]); 86 if($c == 1){ 87 echo " ".current($this->matrix[$i][$j])." "; 88 } else { 89 echo "(".$c.")"; 90 } 91 } 92 echo " "; 93 } 94 echo " "; 95 } 96 97 function dumpAll() { 98 for($i = 0; $i < 9; $i++){ 99 for($j = 0; $j < 9; $j++){ 100 echo implode('', $this->matrix[$i][$j]), " "; 101 } 102 echo " "; 103 } 104 echo " "; 105 } 106 107 function calc($data) { 108 $this->clear(); 109 $this->set($data); 110 $this->_calc(); 111 $this->dump(); 112 } 113 114 function _calc() { 115 for($i = 0; $i < 9; $i++){ 116 for($j = 0; $j < 9; $j++){ 117 if(count($this->matrix[$i][$j]) == 1) { 118 continue; 119 } 120 foreach($this->matrix[$i][$j] as $v){ 121 $flag = false; 122 $t = new Sudoku($this->matrix); 123 if(!$t->setCell($i, $j, $v)){ 124 continue; 125 } 126 if(!$t->_calc()){ 127 continue; 128 } 129 $this->matrix = $t->matrix; 130 return true; 131 } 132 return false; 133 } 134 } 135 return true; 136 } 137 } 138 139 $sd=new Sudoku; 140 $sd->calc(array( 141 array(0,5,0,0,0,6,0,9,0), 142 array(0,4,7,0,8,2,6,0,0), 143 array(0,8,0,0,0,7,0,5,2), 144 array(7,0,1,0,3,4,0,0,6), 145 array(0,3,0,0,2,0,0,8,0), 146 array(2,0,0,0,0,1,9,0,4), 147 array(4,7,0,1,0,0,0,6,0), 148 array(0,0,9,4,6,0,3,7,0), 149 array(0,1,0,2,0,0,0,4,0), 150 )); 151 152 $sd->calc(array( 153 array(1,0,0,0,0,6,9,0,0), 154 array(0,0,0,9,0,0,0,0,5), 155 array(2,0,0,1,0,0,0,0,3), 156 array(0,0,5,3,0,7,0,2,0), 157 array(3,0,0,6,0,0,0,0,1), 158 array(0,1,0,4,0,0,8,0,0), 159 array(9,0,0,0,0,2,0,0,7), 160 array(5,0,0,0,0,9,0,0,0), 161 array(0,0,3,7,0,0,0,0,4), 162 )); 163 164 $sd->calc(array( 165 array(7,0,0,1,0,0,0,0,5), 166 array(0,0,6,0,4,0,0,8,0), 167 array(0,0,1,0,0,0,0,0,0), 168 array(0,6,0,0,8,0,0,0,3), 169 array(0,8,0,0,0,9,0,7,0), 170 array(1,0,0,0,0,0,0,5,0), 171 array(0,0,0,0,0,0,9,0,0), 172 array(0,4,0,0,3,0,1,0,0), 173 array(9,0,0,0,0,7,0,0,2), 174 )); 175 176 $sd->calc(array( 177 array(0,5,0,0,0,0,0,2,0), 178 array(0,0,3,1,0,0,5,0,0), 179 array(0,0,6,0,0,8,0,0,0), 180 array(6,0,0,0,0,0,0,1,0), 181 array(8,0,0,6,0,0,0,0,4), 182 array(0,3,0,0,0,9,0,0,7), 183 array(0,0,0,5,0,0,3,0,0), 184 array(0,0,8,0,0,6,9,0,0), 185 array(0,9,0,0,0,0,0,7,0), 186 ));

 

转载于:https://www.cnblogs.com/zhangjun516/p/3182419.html

更多相关:

  • 虽然循环可以工作,但跟踪嵌套循环也很困难。您可以考虑调用卷积定理来更容易地执行卷积。见here。在使用numpy的fft模块,您可以计算原始图像堆栈的n维离散Fourier变换,并将其乘以大小相同的核的n维Fourier变换(文档可找到here)。因为你的2D内核是一个3x3数组,它是一个3x3xz正方形的“支柱”,你可以用0填充这个...

  • 1. 一维数组 静态 int array[100];   定义了数组array,并未对数组进行初始化静态 int array[100] = {1,2};  定义并初始化了数组array动态 int* array = new int[100];  delete []array;  分配了长度为100的数组array 动态 int* a...

  • 一.选择排序 #include //选择排序 //记录最小的那个数的索引值 //下面这个循环就是去寻找最小的那个数的index //有比k对应的值更小的 //判断是否需要交换 //k和i对应的值交换 void selectsort(int array[],int counttimes){     int k = 0...

  • php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如u975au4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。   1. 使用 json_encode 输出 1

  • 首先准备如下社交图形数据:打开spark-shell;导入相关包:import org.apache.spark._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD创建如上graph对象:// Create an RDD for the vertice...

  • 开发环境使用phpstudy 编辑器用sublime 数据库navicat 需要下载composer 先配置好本地域名,然后需要我们将资源引入到项目里面 下载地址www.layui.com. layui框架有很多我们后台开发需要的控件,帮助我们高效完成后台搭建。 先创建我们的入口文件admins.php,接着我们在a...

  • php 如果在类中定义变量,在类的方法中调用时应该加上$this-> .     class ClassName {private $a = 333;function __construct(){$this->a = 2222;}public function bbb($value=''){echo $this->a;} } $b...

  • 今天我们来看UrlRule.php

  • 【数据对象映射模式】 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数据库,跟数据库中表的一条记录对应起来。   【代码实现】 在代码中实现数据对象映射模式,我们将实现一个 ORM(对象关系映射 Objec...

  • 描述 “托普利兹矩阵”是指如果从左上角到右下角的同一条主斜线上每个元素都相等的矩阵. 给定一个M x N矩阵,判断是否为“托普利兹矩阵”. matrix 是一个二维整数数组.matrix 的行列范围都为 [1, 20].matrix[i][j] 的整数取值范围为[0, 99].样例 样例 1: 输入: matrix = [[1,2,3...