<?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);
?>
php 递归函数 解决 皇后问题 速度有点慢~
最新推荐文章于 2023-08-08 10:37:00 发布