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生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
php数组键值用法实例分析
Feb 27 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
PHP加密解密实例分析
Dec 25 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
Js 刷新框架页的代码
2010/04/13 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
python tornado修改log输出方式
2019/11/18 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
喜之郎果冻广告词
2014/03/20 职场文书
2014年班组工作总结
2014/11/20 职场文书
2015年党员承诺书
2015/01/21 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
余世维讲座观后感
2015/06/11 职场文书