这个只是基础算法, 如果要实际应用, 输出部分要改成保存到数组中。
排列函数定义
- <?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 "<br>";
- 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
- $n = $_POST['n'] ;
- $r = $_POST['r'] ;
- if($n>=$r){
- $used = array();
- $p=array();
- for($i=1;$i<=$n;$i++){
- $used[$i]=0;
- }
- permute(0);
- } 12
- ?>
组登算法:
- <?php
- function luck($start,$loop,$footnote,$choice){
- global $arr;
- for($i=$start;$i<=$loop;$i++){
- $arr[$footnote]=$i;
- if (count($arr)==$choice){
- print_r($arr);
- array_pop($arr);
- echo "<br />";
- continue;
- }
- luck($i+1,$loop+1,$footnote+1,$choice);
- }
- }
- $arr=array();
- $start=1;
- $end=7;
- $choice=3;
- $loop=$end-$choice+1;
- $footnote=0;
- luck($start,$loop,$footnote,$choice);
- ?>