php 递归函数 解决 皇后问题 速度有点慢~

来源:互联网 发布:梅花泪网络歌手 编辑:程序博客网 时间:2024/05/01 11:07
<?php//递归算法解决 皇后问题//皇后问题  在一个n*n的矩阵中,放置n个皇后 ,要求每个皇后不同行,不同列,不在对角线上//递归解决//place(k,n)表示要在k列放置一个皇后,那么就有k-1个皇后已经放好了 //place(k+1,n)则表示k个皇后已近放好了,规模小于plack(k,n)//递归模型//place(i,n)   i>n;输出//place(k,n)   在k列上寻找正确的行来放置//place(k+1,n) 其他$n=10;  //初始化有你n个皇后$pos = array(); //存储放置的位置$count = 0;//输出结果function print_res($pos,&$count){echo 'the',++$count,'res:';foreach ($pos as $col=>$row) //列对应的行{echo '(',$col,',',$row,')',',';}echo '<br/>';}//查找当前位置是否合法function find($row,$col,$pos){$k = 1;while($k<$col){if($pos[$k]==$row || abs($pos[$k]-$row)==abs($k-$col)){return false;}$k++;}return true;}//递归算法function place($k,$n,&$pos,&$count){if($k>$n)print_res($pos,$count);else{for($i=1;$i<=$n;$i++){if(find($i, $k, $pos)){$pos[$k] = $i;place($k+1, $n, $pos,$count);}}}}place(1,$n, $pos,$count);?>

0 0
原创粉丝点击