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 相关文章推荐
与数据库连接
Oct 09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
Mar 27 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
PHP7多线程搭建教程
Apr 21 PHP
php中上传文件的的解决方案
Sep 25 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
php阳历转农历优化版
2016/08/08 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
python实现发送邮件功能代码
2017/12/14 Python
python使用代理ip访问网站的实例
2018/05/07 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
Python实现自动签到脚本功能
2020/08/20 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
金蝶的一道SQL笔试题
2012/12/18 面试题
保安拾金不昧表扬信
2014/01/15 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
学校元旦晚会方案
2014/02/19 职场文书
大学军训感言600字
2014/02/25 职场文书
青安岗事迹材料
2014/05/14 职场文书
拉歌口号大全
2014/06/13 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
入党自传范文2015
2015/06/26 职场文书
乔迁新居祝福语
2019/11/04 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
python 字典和列表嵌套用法详解
2021/06/29 Python