過橋問題:
在漆黑的夜裡,四位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個人一共只帶了一只手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,四人所需要的時間分別是1、2、5、7分鐘;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計一個方案,讓這四人盡快過橋。
PHP代碼:
<?php
//////////////////////////////
///author:彷徨一小生 /////
///www.cnphper.com////
///PHP解決過橋問題 ////
///////////////////////////
$data = array(1,2,5,9);//此處數組$data的元素個數即為對應過橋的人數,可以任意修改(>1)
sort_data($data);
$num = count($data);
if($num == 2)
{
$costtime = $data[1];
}
elseif($num == 3)
{
$costtime = 2*$data[0]+$data[1]+$data[2];
}
elseif($num > 3)
{
$costtime = get_result($data,$num,0);
}
echo "最短的過橋時間為".$costtime;
function get_result($data,$num,$costtime)
{
if(2*$data[1]<$data[0]+$data[$num-2])
{
$costtime+= 2*$data[1]+$data[0]+$data[$num-1];
array_pop($data);
array_pop($data);
$num = count($data);
if($num>3)
{
get_result($data,$num,$costtime);
}
elseif($num==3)
{
$costtime+= 2*$data[0]+$data[1]+$data[2];
return $costtime;
}
elseif($num==2)
{
$costtime+= $data[1];
return $costtime;
}
}
else
{
$costtime+= 2*$data[0]+$data[$num-2]+$data[$num-1];
array_pop($data);
array_pop($data);
$num = count($data);
if($num>3)
{
get_result($data,$num,$costtime);
}
elseif($num==3)
{
$costtime+= 2*$data[0]+$data[1]+$data[2];
return $costtime;
}
elseif($num==2)
{
$costtime+= $data[1];
return $costtime;
}
}
}
function sort_data(&$data)
{
sort($data);
reset($data);
}
?>