首頁 >後端開發 >php教程 >php中關於回溯演算法的範例分享

php中關於回溯演算法的範例分享

黄舟
黄舟原創
2017-09-07 09:21:071234瀏覽

 一頭大牛駝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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn