分类:
2006-07-17 17:22:18
class Queen{ var $chess; //皇后位置 var $queens; //皇后数 var $result = array();//正解 function Queen($queens){ $this -> queens = $queens; //棋盘大小 $queens x $queens $this -> place(); //开始放置第0个皇后 } //在第$n行放置皇后 function place($n=0){ if($n == $this -> queens){ //得到一个解 for($i = 0 ; $i < $this -> queens ; $i++) $re[] = $this -> chess[$i]; //保存皇后位置 $this -> result[] = $re; return; } for($i = 1 ; $i <= $this -> queens ; $i++){ $this -> chess[$n] = $i; if($this -> isOK($n)) $this -> place($n + 1); } } //判断位置是否有效 function isOK($n){ for($i = 0 ; $i < $n ; $i++){ if($this -> chess[$i] == $this -> chess[$n] || abs($this -> chess[$i] - $this -> chess[$n]) == ($n - $i)) return 0; } return 1; } function getResult(){ return $this -> result; } } |
$queen = new Queen(8); $re = $queen->getResult(); //输出 $k=0; foreach($re as $v) { echo "输出第".++$k."个结果: "; echo "
"; } |
当n=8时,共有92种解法,其中部分结果如下:
输出第1个结果:
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q |
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q |
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q | |||||||
Q |
各位朋友有兴趣也可以将皇后改成骑士(马),马的控制范围为直走两格,横走一格,即"日"字形..