實例如下:
<?php/*分治法——直接選擇比如說a b c首先將a之后的字符依次與a進行交換1 b,a,c2 c,b,a注意這里少了一個原始數據 a,b,c。需要把原始數據也算如排列中3 a,b,c然后把字符移到第二個位置,將第二個位置之后的數分別與第二個位置的數進行交換1 b,a,c ===> 11 b,c,a2 c,b,a ===> 21 c,a,b3 a,b,c ===> 31 a,c,b**/function zuhe($arr,$begin){  if(!is_array($arr)) return ;  $N = count($arr);  if($begin == $N-1 || $begin >$N || $begin <0) return ;  if($begin == 0){    print_r($arr);//輸出原始數據    echo '</br>';  }   //循環將初始值與第i個值交換后進行組合  for($i = $begin;$i < $N;$i++){    $t = $arr[$begin];    $arr[$begin] = $arr[$i];    $arr[$i] = $t;    if($i!==$begin){//i==begin時的數已經輸出過      print_r($arr);      echo '</br>';    }    zuhe($arr,$begin+1);      $t = $arr[$begin];    $arr[$begin] = $arr[$i];    $arr[$i] = $t;  }}$arr = array('a','b','c','d');//zuhe($arr,0);/*分治法——直接插入初始時從0個元素開始,輸出初始序列,為組合的一個序列當在來一個元素時只需將該元素放在該元素之前的元素組的不同的位置即組成了不同的排列如已有元素組為a,b.新元素為c,把c分別與a,b進行交換即可(a,c,b);(c,b,a),在現有的排列上在新增元素重復執行以上步驟*/function zuhe2($arr,$begin){  if($begin==0) {    print_r($arr);    echo "</br>";    //zuhe2($arr,$begin+1);  }  if($begin >= count($arr)) return ;  zuhe2($arr,$begin+1);//begin時的排列上一次已產生,直接新增元素  for($i = $begin-1;$i>=0;$i--){    $t = $arr[$begin];    $arr[$begin] = $arr[$i];    $arr[$i] = $t;    print_r($arr);    echo "</br>";    zuhe2($arr,$begin +1);    $t = $arr[$begin];    $arr[$begin] = $arr[$i];    $arr[$i] = $t;  }}以上這篇淺談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。
| 
 
 | 
新聞熱點
疑難解答
圖片精選