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原理之变量(Variables inside PHP)
Aug 09 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
Yii2中Restful API原理实例分析
Jul 25 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
PHP 时间处理类Carbon
May 20 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
使用python3实现操作串口详解
2019/01/01 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
一些.net面试题
2014/10/06 面试题
简述安装Slackware Linux系统的过程
2012/05/08 面试题
学校花圃的标语
2014/06/18 职场文书
元旦晚会开场白
2015/05/29 职场文书
辞职离别感言
2015/08/04 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers