問題:在漆黑的夜裡,四位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個人一共只帶了一只手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,四人所需要的時間分別是1、2、5、10分鐘;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計一個方案,讓這四人盡快過橋。
JAVA實現功能如下:(jdk1.3,jbuild7測試通過)
public class mks {
public mks() {
int[] i={1,2,5,10};
boolean[] j={true,true,true,true};
int go=1;
int time=0;
for(;true;)
{
if(j[0]||j[1]||j[2]||j[3])
{
if(go==1)
{
go=0;
if(j[0]==true&&j[1]==true)
{
System.out.print(i[0]+"過橋\r\n");
System.out.print(i[1]+"過橋\r\n");
time+=i[1];
System.out.print("time="+time+"\r\n");
j[0]=false;
j[1]=false;
}
else
{
System.out.print(i[2]+"過橋\r\n");
System.out.print(i[3]+"過橋\r\n");
time+=i[3];
System.out.print("time="+time+"\r\n");
j[2]=false;
j[3]=false;
}
}
else
{
go=1;
if(j[0]==false)
{
j[0]=true;
System.out.print(i[0]+"回來\r\n");
time+=i[0];
System.out.print("time="+time+"\r\n");
}
else
{
j[1]=true;
System.out.print(i[1]+"回來\r\n");
time+=i[1];
System.out.print("time="+time+"\r\n");
}
}
}
else
{
break;
}
}
}
}