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 相关文章推荐
PHP Ajax中文乱码问题解决方法
Feb 27 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
php header Content-Type类型小结
Jul 03 PHP
基于php-fpm的配置详解
Jun 03 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
php微信开发之上传临时素材
Jun 24 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
PHP日期和时间函数的使用示例详解
Aug 06 PHP
php框架知识点的整理和补充
Mar 01 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
德劲1103的维修打理经验
2021/03/02 无线电
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
yii操作cookie实例简介
2014/07/09 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
Javascript调用C#代码
2011/01/17 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
轮播图组件js代码
2016/08/08 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
微信小程序 网络通信实现详解
2019/07/23 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
证婚人经典证婚词
2014/01/09 职场文书
2019年度开业庆典祝福语大全!
2019/07/05 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
Python字符串常规操作小结
2022/04/03 Python
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android