博学而笃志 切问而近思 仁在其中
详情
PHP解决过桥问题
作者:Aliot     发布时间:2017-07-02     评论:0     阅读:0

PHP解决过桥问题

时间:2011-02-05 cnphper 彷徨一小生

过桥问题:

在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、7分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥。

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);
}


?>


相关文章
loading......
最新动态
所有评论

loading......

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册