1. 程式人生 > 實用技巧 >php 實現八皇后問題

php 實現八皇后問題

php實現的八皇后問題,可以推廣到N皇后

<?php

classEmpress{ private$queen;//儲存位置,例如$queen[2] = 3表示第三行的第四列位置,行列從0計數 publicstatic$count;//總共有多少種排列順序 private$m;//規模數量 //設定幾皇后,返回排列結果 publicfunctiongetResult($m){ $this->m =$m; $this->put(0); } //判斷第$n行放置位置$queen[$n] = $i 是否和前面的行衝突(同行,同列衝突,對角線衝突) /** * @param $n 第n行 * @return bool是否衝突
*/ privatefunctionattack($n){ for($i=0;$i<$n;$i++){ if($this->queen[$n] ==$this->queen[$i] ||abs($this->queen[$n]-$this->queen[$i]) ==abs($n-$i)){ returntrue; } } returnfalse; } /** * * 列印函式 */ privatefunctionshow(){ for($i=0;$i<$this->m;$i++){ echo$this->queen[$i].'--'; } } /**
* * 放置第n行的位置 */ privatefunctionput($n){ for($i=0;$i<$this->m;$i++){ $this->queen[$n] =$i;//依次試探 $tmp_res=$this->attack($n); //如果沒有衝突,要麼繼續放置下一行,要麼到最後一行了。 if(!$tmp_res){ if($n==$this->m-1){ $this->show(); echo'第'.(self::$count+1).'種排列方法'; echo"<br/>"; self::$count++; }else{ $this->put(
$n+1); } } } } } classClient{ publicstaticfunctionmain(){ $obj=newEmpress(); $obj->getResult(4); } } Client::main(); ?>