过桥问题,求最短时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过桥问题,求最短时间相关的知识,希望对你有一定的参考价值。

小明一家5口人在夜晚过一座桥,小明过桥要1分钟,小明的弟弟过桥要3分钟,小明的爸爸过桥要6分钟,小明的妈妈过桥要8分钟,小明的爷爷过桥要12分钟;这座桥每次只能过2个人,因是夜晚,过桥时必须提着灯,小明有一只灯,点燃后30分钟会熄灭,问怎么样安排,才能保证小明一家在灯熄灭前过桥。

写了一个php程序解决这类问题。有问题,欢迎指出。

<?php
/*
过桥问题
*/
main();
function main(){
    $arr=array(3,1,12,8,6);
    print bridge($arr);
}
function bridge($arr){
    $route="";
    if(count($arr)==1){
        $route.=$arr[0];
    } 
    elseif(count($arr)==2){
        $route.=$arr[0]>$arr[1]?$arr[0]:$arr[1];
    }else{
        sort($arr);
        $route.=$arr[1]."=>";
        $route.=$arr[0]."=>";
        $arrTmp=$arr;
        unset($arrTmp[0]);
        unset($arrTmp[1]);
        sort($arrTmp);
        while(count($arrTmp)>1){
            //关键
            if($arrTmp[count($arrTmp)-2]+$arr[0]>2*$arr[1]){
                $route.=$arrTmp[count($arrTmp)-1]."=>";
                $route.=$arr[1]."=>";
                $route.=$arr[1]."=>";
                $route.=$arr[0]."=>";
            }else{
                $route.=$arrTmp[count($arrTmp)-1]."=>";
                $route.=$arr[0]."=>";
                $route.=$arrTmp[count($arrTmp)-2]."=>";
                $route.=$arr[0]."=>";
            }
            unset($arrTmp[count($arrTmp)-2]);
            unset($arrTmp[count($arrTmp)]);
        }
        if(count($arrTmp)==1){
            $route.=$arrTmp[count($arrTmp)-1];
        }else{
            $route=substr($route,0,strlen($route)-strlen("=>".$arr[0]."=>"));
        }
        return $route;
    }
}

 

以上是关于过桥问题,求最短时间的主要内容,如果未能解决你的问题,请参考以下文章

小明一家过桥问题

在夜里,有4个人要过桥,他们过桥分别要10分钟,5分钟,2分钟,1分钟,有1个手电,一次只能过两个,最短多长能过桥

过桥问题

甲;乙;丙;丁四个人过桥,分别需要1,2,5,10分钟。因为天黑,必须借助手电筒过桥可是总共只有一个手电

手电筒过河

模板前向星 SPFA求最短(长)路