class {
private $bord;
public function __construct(array $bord) {
$this->bord = $bord;
}
public function run() {
$pos = $this->next();
if ($pos == false) {
return true;
};
list($x, $y) = $pos;
for ($v = 1; $v < 10; $v++) {
if ($this->check($x, $y, $v)) {
$this->set($x, $y, $v);
if($this->run()){
return true;
};
}
}
$this->release($x, $y);
return false;
}
public function next() {
foreach ($this->bord as $x => $array) {
foreach ($array as $y => $v) {
if ($v == 0) {
return [$x, $y];
}
}
}
return false;
}
public function check($x, $y, $v) {
foreach ($this->bord as $x_a) {
if ($x_a[$y] == $v) {
return false;
}
}
foreach ($this->bord[$x] as $y_v) {
if ($y_v == $v) {
return false;
}
}
$x_b = intval(floor(($x-1)/3)*3 +1);
$y_b = intval(floor(($y-1)/3)*3 +1);
for ($x = $x_b; $x < $x_b + 3; $x++) {
for ($y = $y_b; $y < $y_b + 3; $y++) {
if($this->bord[$x][$y] ==$v){
return false;
}
}
}
return true;
}
public function set($x, $y, $v) {
$this->bord[$x][$y] = $v;
}
public function complete() {
return $this->next() === false;
}
public function release($x, $y) {
$this->bord[$x][$y] = 0;
}
public function string($x_r=null,$y_r=null) {
$str = '';
foreach ($this->bord as $x => $array) {
foreach ($array as $y => $v) {
if($x_r && $y_r && $x_r==$x && $y_r==$y){
$str .= '<span style="color:red">'.$v . '</span> ';
}else{
$str .= $v . ' ';
}
}
$str .= '<br/>';
}
return $str;
}
public function __toString() {
$str = '';
foreach ($this->bord as $x => $array) {
foreach ($array as $y => $v) {
$str .= $v . ' ';
}
$str .= '<br/>';
}
return $str;
}
}
$bord = new bord(array_fill(1,9,array_fill(1,9,0)));
$bord ->run();
echo $bord ;
近期评论