PHP实现的回溯算法示例


Posted in PHP onAugust 15, 2017

本文实例讲述了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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
php入门小知识
Mar 24 PHP
php session 错误
May 21 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
基于php和mysql的简单的dao类实现crud操作功能
Jan 27 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
php动态变量定义及使用
Jun 10 PHP
PHP实现图片上传并压缩
Dec 22 PHP
php smtp实现发送邮件功能
Jun 22 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
php获取微信openid方法总结
Oct 10 PHP
php简单中奖算法(实例)
Aug 15 #PHP
PHP实现的随机红包算法示例
Aug 14 #PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 #PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 #PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 #PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 #PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 #PHP
You might like
thinkphp浏览历史功能实现方法
2014/10/29 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
Python中Class类用法实例分析
2015/11/12 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
请说出几个常用的异常类
2013/01/08 面试题
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
数学系个人求职信范文
2014/01/30 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
领导欢送会主持词
2015/07/06 职场文书
《打电话》教学反思
2016/02/22 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python