程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP解決過橋問題

PHP解決過橋問題

編輯:PHP綜合

過橋問題:

在漆黑的夜裡,四位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個人一共只帶了一只手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,四人所需要的時間分別是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);
}


?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved