PHP實現(xiàn)的回溯算法示例
本文實例講述了PHP實現(xiàn)的回溯算法。分享給大家供大家參考,具體如下:
問題:
一頭大牛駝2袋大米,一頭中牛駝一袋大米,兩頭小牛駝一袋大米,請問100袋大米需要多少頭大牛,多少頭中牛,多少頭小牛?
實現(xiàn)代碼:
<?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)
{
//輸出最優(yōu)解
if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3]))
{
echo "最優(yōu)解,大米:${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);
?>
運行結(jié)果如下圖:

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學運算技巧總結(jié)》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
php生成隨機數(shù)/生成隨機字符串的方法小結(jié)【5種方法】
這篇文章主要介紹了php生成隨機數(shù)/生成隨機字符串的方法,結(jié)合實例形式分析了php生成隨機數(shù)/生成隨機字符串的5種實現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下2020-05-05
PHP調(diào)用Linux命令權(quán)限不足問題解決方法
這篇文章主要介紹了PHP調(diào)用Linux命令權(quán)限不足問題解決方法,本文是解決項目問題總結(jié)而來,通過修改sudo配置文件解決無權(quán)限執(zhí)行命令問題,需要的朋友可以參考下2015-02-02
PHP中mysql_field_type()函數(shù)用法
這篇文章主要介紹了PHP中mysql_field_type()函數(shù)用法,較為詳細的分析了使用mysql_field_type()函數(shù)獲取指定字段類型的方法,是PHP+MySQL程序設(shè)計中非常實用的技巧,需要的朋友可以參考下2014-11-11
php擴展Zend?Framework框架——Validate擴展
這篇文章介紹了php擴展Zend?Framework框架,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2008-01-01

