过桥问题,求最短时间
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个手电,一次只能过两个,最短多长能过桥