一起源码网

标题: php中关于回溯算法的示例分享 [打印本页]

作者: 云文章    时间: 2020-4-26 03:30
标题: 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]
";
        }

        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);

?>


作者: 没意思    时间: 2022-7-26 18:50
波士顿公司代码开源




欢迎光临 一起源码网 (https://www.171739.xyz/) Powered by Discuz! X3.3