当前位置:首页 > 日记 > 正文

PHP实现的回溯算法示例

PHP实现的回溯算法示例

本文实例讲述了PHP实现的回溯算法。分享给大家供大家参考,具体如下:

问题:

 一头大牛驼2袋大米,一头中牛驼一袋大米,两头小牛驼一袋大米,请问100袋大米需要多少头大牛,多少头中牛,多少头小牛?

实现代码:

<?php/* * k = 2x + y + 1/2z 取值范围 * 0 <= x <= 1/2k * 0 <= y <= k * 0 <= z < = 2k * x,y,z最大值 2k */$daMi = 100;$result = array();function isOk($t,$daMi,$result){/*{{{*/ $total = 0; $hash = array(); $hash[1] = 2; $hash[2] = 1; $hash[3] = 0.5; for($i=1;$i<=$t;$i++) { $total += $result[$i] * $hash[$i]; } if( $total <= $daMi) { return true; } return false;}/*}}}*/function backtrack($t,$daMi,$result){/*{{{*/ //递归出口 if($t > 3) { //输出最优解 if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3])) {  echo "最优解,大米:${daMi},大牛:$result[1],中牛: $result[2],小牛:$result[3]\n"; } return; } for($i = 0;$i <= 2 * $daMi;$i++) { $result[$t] = $i; //剪枝 if(isOk($t,$daMi,$result)) {  backtrack($t+1,$daMi,$result); } $result[$t] = 0; }}/*}}}*/backtrack(1,$daMi,$result);?>

运行结果如下图:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

相关文章

Photoshop绘制立体漂亮的拾色器图

Photoshop绘制立体漂亮的拾色器图

图标,教程,绘制,漂亮,电脑软件,使用Photoshop绘制立体漂亮的拾色器图标教程,步骤大致分为制作拾色器的底盘、绘制拾色器的内层两大部分,主要用到了图层样式,绘制的拾色器图标非常的精致漂亮,小编很喜欢,推荐给的朋友一起分享学习!效果图:主要过程:1…

excel中乘法公式运算的教程excel中

excel中乘法公式运算的教程excel中

运算,教程,乘法,公式,电脑软件,  Excel中乘法公式具体该如何操作运算呢?下面是由小编分享的excel中乘法公式运算的教程,以供大家阅读和学习。excel中乘法公式运算的教程1步骤1:选择乘数所在的单元格区域A1:A8,按&ldquo;Ctrl+C&rdquo;进行复制…

原生JS中slice | 方法和splice |

原生JS中slice | 方法和splice |

方法,原生,区别,电脑软件,slice,slice()方法和splice()方法都是原生js中对数组操作的方法。那么他两种有什么区别呢?今天通过本文教程给大家简单介绍下。slice(),返回一个新的数组,该方法可从已有的数组中返回选定的元素。例如:arrObject(start…

ps怎样合成一张马戏团大象和老鼠滑

ps怎样合成一张马戏团大象和老鼠滑

马戏团,滑板,大象,老鼠,电脑软件,ps怎样合成一张马戏团大象和老鼠滑板表演的图片?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果教程步骤:12 3 4 5 6 7 8 阅读全文1 23 4 5 6 7 8 阅读全文1 …

微信小程序 sha1 实现密码加密实例

微信小程序 sha1 实现密码加密实例

加密,密码,详解,实例,程序,微信小程序 sha1 实现密码加密实例详解在utils中的util.js 文件中增加 函数 实现 字符串转换为16进制加密后的字符串function encodeUTF8(s) { var i, r = [], c, x; for (i = 0; i < s.length; i++) if ((c = s…

ps怎么给添加像素化特效?

ps怎么给添加像素化特效?

像素,特效,电脑软件,ps,利用ps制作像素化人物特效,主要使用了ps的颜色通道和彩色半调功能,现在就把操作步骤和截图分享出来,供大家参考使用,希望对你有所帮助。软件名称:Photoshop CS5 绿色版官方中文正式原版软件大小:104.06MB更新时间:2014-06-0…

QQ空间怎么快速搜索好友动态

QQ空间怎么快速搜索好友动态

动态,空间,快速搜索,好友,电脑软件,  QQ空间怎么快速搜索好友动态?QQ空间新增空间搜索功能,大家开来尝鲜吧。跟随小编,一块看看如何搜索QQ空间好友动态,需要的朋友可以参考下.欢迎大家前来阅读!QQ空间怎么快速搜索好友动态  1、点击appsto…

PPT2013中怎么做让文字波浪起伏效

PPT2013中怎么做让文字波浪起伏效

波浪,文字,效果,怎么做,电脑软件,  在PPT2013中插入文本框之后,输入文字,文字是没有任何效果的,如果给文字添加一些动画效果,在幻灯片放映时毫无疑问会更加生动有趣。以下是小编为您带来的关于PPT2013中让文字波浪起伏效果,希望对您有所帮助。…

全面解析Node.js 8 重要功能和修复

全面解析Node.js 8 重要功能和修复

功能,电脑软件,Node,js,5月30日12点,Node.js 8正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(LTS)。下面就来介绍Node.js 8版本中最重要的功能和修复。新版本的代号是Carbon。Node.js 8将从2017年10月起,正式…

数组Array的一些方法 | 总结

数组Array的一些方法 | 总结

方法,数组,电脑软件,Array,数组对象属性和方法的概述:1> arr.push() 将参数添加至数组的末尾,返回的是新数组的长度2> arr.unshift() 将参数添加到数组的开头,返回新数组的长度3> arr.shift() 删除数组的第一位,返回被删除的数字4> arr.pop() …

JS实现按钮控制计时开始和停止功能

JS实现按钮控制计时开始和停止功能

控制,按钮,功能,电脑软件,JS,下面给大家分享一段实例代码关于JS实现按钮控制计时开始和停止功能,具体代码如下所示:<span style="font-size:18px;"><body> 小闹钟: <span id="nz"></span> <input type="button" value="开始计时" o…

cdr怎么给添加艺术印象派效果?

cdr怎么给添加艺术印象派效果?

印象派,效果,艺术,电脑软件,cdr,cdr中图片可以制作很多效果,今天我们就来看看使用艺术笔触给图片添加艺术效果的教程。软件名称:CorelDraw x6 (Cdr x6) 官方简体中文破解版(32位)安装图文教程、破解注册方法软件大小:更新时间:2014-08-271、打开C…