首页 > 代码库 > 过桥问题,求最短时间

过桥问题,求最短时间

小明一家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;
    }
}

 

过桥问题,求最短时间