过桥问题:
在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是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);
}
?>