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 高手之路(三)
Oct 09 PHP
php error_log 函数的使用
Apr 13 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
PHP编码转换
Nov 05 PHP
解析PHP的session过期设置
Jun 29 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
php metaphone()函数的定义和用法
May 15 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 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简单系统查询模块代码打包下载
2008/06/07 PHP
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
Javascript Math对象
2009/08/13 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
如何保障Web服务器安全
2014/05/05 面试题
大学活动策划书范文
2014/01/10 职场文书
辩论赛主持词
2014/03/18 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
求职意向书范本
2015/05/11 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android