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对二维数组按指定键值key排序示例代码
Nov 26 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
php文件上传简单实现方法
Jan 24 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
Laravel实现autoload方法详解
May 07 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 PHP
PHP加MySQL消息队列深入理解
Feb 27 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 cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
php解析url的三个示例
2014/01/20 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
php获取微信openid方法总结
2019/10/10 PHP
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
一篇不错的Python入门教程
2007/02/08 Python
python类定义的讲解
2013/11/01 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python部署web开发程序的几种方法
2017/05/05 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
基于python实现简单日历
2018/07/28 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Django web框架使用url path name详解
2019/04/29 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
python -v 报错问题的解决方法
2020/09/15 Python
医学专业毕业生个人的求职信
2013/12/04 职场文书
酒店总经理工作职责
2013/12/13 职场文书
高中班长自我鉴定
2013/12/20 职场文书
初中生自我鉴定
2014/02/04 职场文书
寄语十八大感言
2014/02/07 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
团日活动总结格式
2015/05/11 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL