1 <?php
2 /**
3 *在n行n列的棋盘上,如果两个皇后位于棋盘上
4 *的同一行或者同一列或者同一对角线上,则称
5 *他们为互相攻击。现要求找出使n元棋盘上的n
6 *个皇后互不攻击的所有布局。
7 */
8 //判断第k个皇后放在k行的x列上会不会有冲突
9 function place($k,$x){
10 for($i=0;$i<$k;$i++){
11 if(abs($k-$i)==abs($x[$k]-$x[$i])||$x[$k]==$x[$i]){
12 return false;
13 }
14 }
15 return true;
16 }
17 function queen($n){
18 $x = array();
19 for($i=0;$i<$n;$i++){
20 $x[$i] = 0;
21 }
22 $i = 0;
23 while($i>=0&&$i<$n){
24 while($x[$i]<$n&&!place($i,$x)){
25 $x[$i] = $x[$i] + 1;
26 }
27 if($x[$i]<$n&&$i==$n-1){
28 print_r($x);
29 exit;
30 }else if($x[$i]>=$n){
31 $x[$i] = 0;
32 $i -= 1;
33 $x[$i] += 1;
34 }else{
35 $i += 1;
36 }
37 }
38 }
39 queen(10);