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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
PHP 选项及相关信息函数库
Dec 04 PHP
php中函数的形参与实参的问题说明
Sep 01 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
微信推送功能实现方式图文详解
Jul 12 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
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
文本加密解密
2006/06/23 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
vue实现侧边栏导航效果
2019/10/21 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
python实现哈希表
2014/02/07 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python中下标和切片的使用方法解析
2019/08/27 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
幼儿园小班个人工作总结
2015/02/12 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis