从网上参考了C++的代码, 模仿写了个PHP的, 有些朋友需要。
这个只是基础算法, 如果要实际应用, 输出部分要改成保存到数组中。
排列函数定义
[php]function permute($pos){
global $n ,$r , $used , $p ;
/*如果已是第r个元素了,则可打印r个元素的排列 */
//如果要实际应用,这里要保存到数组中。
if ($pos==$r) {
for ($i=0; $i<$r; $i++)
echo $p[$i]+1;
echo "
";
return;
}
for ($i=0; $i<$n; $i++)
if ($used[$i]==0) { /*如果第i个元素未用过*/
/*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/
$used[$i]++;
/*保存当前搜索到的第i个元素*/
$p[$pos] = $i;
/*递归搜索*/
permute($pos+1);
/*恢复递归前的值,目的是使以后改元素可用*/
$used[$i]--;
}
}[/php]
使用部分
[php]$n = $_POST['n'] ;
$r = $_POST['r'] ;
if($n>=$r){
$used = array();
$p=array();
for($i=1;$i<=$n;$i++){
$used[$i]=0;
}
permute(0);
}[/php]
演示地址 : http://demo.naturedesign.com.hk/client/test/mytest.php