PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
本文实例讲述了PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能。分享给大家供大家参考,具体如下:
<?php $n=$_REQUEST["n"]; if($n>8) { echo "{$n}太大了,影响服务器性能"; return; } define("N",$n); $d=array(); $v=array(); for($i=0;$i<=N;$i++){ $d[$i]=$v[$i]=0; } function dfs($depth){ global $d,$v; if($depth>=N){ for($i=0;$i!=N;$i++){ echo $d[$i]; } echo "<br>"; return; } for($i=1;$i<=N;$i++){ if($v[$i]==0){ $v[$i]=1; $d[$depth]=$i; dfs($depth+1); $v[$i]=0; } } } dfs(0);
这里以get方法传入参数n=4为例,输出如下:
1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
php通过排列组合实现1到9数字相加都等于20的方法
本文实例讲述了php通过排列组合实现1到9数字相加都等于20的方法.分享给大家供大家参考.具体实现方法如下: <?php set_time_limit(0); /* 函数说明:huoqu_zhuhe($eq,$jiashu,$isone=0) 参数说明:$eq---几个数相加的总和: $jiashu-------加数数组:$jiashu=array(1,2,3,4,5,6,7,8,9),可以使用的加数: $isone---是否要每次使用不同的加数,唯一性,1是 0 不,默认1 返回类型:数组,数
-
PHP实现的简单排列组合算法应用示例
本文实例讲述了PHP实现的简单排列组合算法应用.分享给大家供大家参考,具体如下: 一.问题: 给你一个40斤的西瓜,给3个人分,有多少种分法? 二.PHP实现代码: <?php $aa = range(1,40); $bb = array(); foreach($aa as $k=>$val){ foreach($aa as $v){ foreach($aa as $vl){ $sum = $val+$v+$vl; if($sum == 40){ $bb[$k][0] = $val; $bb[
-
PHP实现字符串的全排列详解
输入一个字符串,按字典序打印出该字符串中字符的所有排列. 例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 思路: 1.利用递归形成递归树,达到深度优先,固定首字母的效果 2.得复位以后才能再次深度优先 3.回溯法思想 4.一张图和一个运行过程,只能慢慢体会了 <?phpfunction test($str,$start,&$res){ //递归终止条件 if($start==strlen($str)){ $res[]=
-
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
实例如下: <?php /*分治法--直接选择 比如说a b c 首先将a之后的字符依次与a进行交换 1 b,a,c 2 c,b,a 注意这里少了一个原始数据 a,b,c.需要把原始数据也算如排列中 3 a,b,c 然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换 1 b,a,c ===> 11 b,c,a 2 c,b,a ===> 21 c,a,b 3 a,b,c ===> 31 a,c,b **/ function zuhe($arr,$begin){
-
php求数组全排列,元素所有组合的方法
本文实例讲述了php求数组全排列,元素所有组合的方法.分享给大家供大家参考,具体如下: <?php $source = array('pll','我','爱','你','嘿'); sort($source); //保证初始数组是有序的 $last = count($source) - 1; //$source尾部元素下标 $x = $last; $count = 1; //组合个数统计 echo implode(',', $source), "<br>"; //输出第
-
php求数组全排列,元素所有组合的方法总结
本文实例讲述了php求数组全排列,元素所有组合的方法总结. 分享给大家供大家参考,具体如下: <?php $source = array('pll','我','爱','你','嘿'); sort($source); //保证初始数组是有序的 $last = count($source) - 1; //$source尾部元素下标 $x = $last; $count = 1; //组合个数统计 echo implode(',', $source), "<br>"; //
-
php实现的生成排列算法示例
本文实例讲述了php实现的生成排列算法.分享给大家供大家参考,具体如下: <?php function perm($s, $n, $index) { if($n == 0) { return ''; } else { $nIndex = count($index); //可用的字符串下标 $res = array(); foreach($index as $i => $v) { $tmp = $index; unset($tmp[$i]); //去掉当前的前缀 /* 调试信息,便于理解 ech
-
PHP输出多个元素的排列或组合的方法
实例如下: <?php $arr = array('a','b','c','d'); $result = array(); $t = getCombinationToString($arr, 1); print_r($t); $t = getCombinationToString($arr, 2); $t2 = getunique($t); print_r($t2); $t = getCombinationToString($arr, 3); $t2 = getunique($t); print
-
php全排列递归算法代码
算法原理如果用P表示n个元素的全排列,而Pi表示n个元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前缀i的排列,那么n个元素的全排列可递归定义为: ① 如果n=1,则排列P只有一个元素i: ② 如果n>1,则全排列P由排列(i)Pi构成:根据定义,可以看出如果已经生成(k-1)个元素的排列Pi,那么k个元素的排列可以在每个Pi前面加上元素i而生成.代码实现 复制代码 代码如下: function rank($base, $temp=null){ $len = st
-
使用php计算排列组合的方法
前些天因为业务需要写了一段计算排列组合的代码,今天整理了一下,以备后用 复制代码 代码如下: <?php/** * 要解决的数学问题 :算出C(a,1) * C(b, 1) * ... * C(n, 1)的组合情况,其中C(n, 1)代表从n个元素里任意取一个元素 * * 要解决的实际问题样例:某年级有m个班级,每个班的人数不同,现在要从每个班里抽选一个人组成一个小组, * 由该小组来代表该年级参加学校的某次活动,请给出所有可能的组合 *//*
随机推荐
- Docker 给运行中的容器设置端口映射的方法
- 如何使用CSS3画出一个叮当猫
- Node.js文件操作详解
- 非常不错的脚本入侵基础知识总结第1/2页
- 详解Nginx防盗链和Nginx访问控制与Nginx解析php的配置
- Apeache启动不成功时,用命令行检测的方法
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室实例
- java 中volatile和lock原理分析
- 基于javascript实现tab选项卡切换特效调试笔记
- JavaScript中的迭代器和生成器详解
- JavaScript模板引擎Template.js使用详解
- JS连连看源码完美注释版(推荐)
- url地址自动加#号问题说明
- js仿iphone秒表功能 计算平均数
- 详解PHP的Yii框架中组件行为的属性注入和方法注入
- ubuntu用wifi连接android调试程序的步骤
- ThinkPHP中URL路径访问与模块控制器之间的关系
- Android自定义 WebView浏览器
- Javascript 判断Flash是否加载完成的代码
- MSSQL SERVER 2005 数学函数整理