java版4人过桥问题

夜晚四人过桥,一人有手电筒,每次最多两人同行,过桥时间按最慢者计。给定时间数组{1,2,5,7},目标是最小总时间。问题通过递归解决,遍历所有组合,耗时最少者返回桥头形成三人过桥问题,直至剩两人直接过桥。" 39472493,1436771,深入理解Android Scroller:ScrollTo与ScrollBy,"['Android开发', '移动开发', 'Android Scroller', 'UI交互']
摘要由CSDN通过智能技术生成

夜晚,桥头有 4个人在一起准备过桥,这些人中只有一个人有手电筒,从桥头走到桥尾一次最多只能俩个人同时行进,每个人单独过桥的时间可能不一样,如果两个人在一起走,则这次的花费时间是走的最慢的那个人,假如现在四个人单独过桥的时间分别是 1,2,5,7,将它们放在一个数组中{1,2,5,7}算出最少的过桥时间。

问题解析:这个问题可以用递归解决。定义俩个指针,i和j,这俩个指针只能向前遍历。i从数组的第i位开始挑出一个人,j是在数组挑出第i位之后再从数组中挑出的人,这样就遍历了数组内各种情况的组合。在从四个人中随便抽出俩个过桥,此时从桥尾选出一个耗时最少的人重新回到桥头,这时候就成了3人过桥的问题,3人过桥又是找出各种组合过桥,最终就剩下俩个人在桥头,这时候俩个人就直接过桥,不用再进行组合过桥。可见俩个人过桥就是递归的出口。

以下是代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class FourMenPassBridge {
	public static void main(String[] args) {
		int[] source = {1,2,5,7};
		FourMenPassBridge pass = new FourMenPassBridge();
		pass.setSrc(source);
		pass.passBridge(pass.getSrc(), pass.getDes(), 0);
		int min = pass.result.get(0);
		for(int i = 0;i
   
   
    
     result = new ArrayList
    
    
     
     ();
	public static int count=0;
	public FourMenPassBridge(){
		des = new Vector();
		src = new Vector();
	}
	public void setSrc(int[] array){
		for(int i = 0;i
     
     
      
      =3){
			for(int i = 0;i
      
      
     
     
    
    
   
   

以下是运行结果:先列举出各种情况,最后判断出最少的时间
入口:src-[1, 2, 5, 7]des-[]
i=0-1,j=1-2
先这俩个人过去:1和2
这时从桥尾回来的是:1
[5, 7, 1]des+[2]
入口:src-[5, 7, 1]des-[2]
i&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值