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ù)學(xué)運算技巧總結(jié)》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
了解Joomla 這款來自國外的php網(wǎng)站管理系統(tǒng)
joomla在國外很熱,就連臺灣都有不少站使用joomla,國內(nèi)就對joomla缺乏了解。大多都使用dedecms或者phpcms等。在這四個月來一直在學(xué)習(xí)joomla,覺得用它來建站很方便。2010-03-03
php圖片的二進(jìn)制轉(zhuǎn)換實現(xiàn)方法
這篇文章主要介紹了php圖片的二進(jìn)制轉(zhuǎn)換實現(xiàn)方法,詳細(xì)介紹了圖片與二進(jìn)制之間轉(zhuǎn)換的原理與實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下2014-12-12
深入掌握include_once與require_once的區(qū)別
要深入掌握include(_once)與require(_once),需要掌握以下幾點內(nèi)容,不過有人建議不建議使用2013-06-06
給apache2.2加上mod_encoding模塊後 php5.2.0 處理url出現(xiàn)bug
給apache2.2加上mod_encoding模塊後 php5.2.0 處理url出現(xiàn)bug...2007-04-04

