java版4人过桥问题

来源:互联网 发布:经常用到的c语言函数库 编辑:程序博客网 时间:2024/04/30 17:41

夜晚,桥头有 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=0-5,j=1-7
先这俩个人过去:5和7
这时从桥尾回来的是:2
[1, 2]des+[5, 7]
入口:src-[1, 2]des-[5, 7]
最后俩个人过去的是:1和2
第1种情况=======================总共花的时间是:14
i=0-5,j=2-1
先这俩个人过去:5和1
这时从桥尾回来的是:1
[7, 1]des+[2, 5]
入口:src-[7, 1]des-[2, 5]
最后俩个人过去的是:7和1
第2种情况=======================总共花的时间是:16
i=1-7,j=2-1
先这俩个人过去:7和1
这时从桥尾回来的是:1
[5, 1]des+[2, 7]
入口:src-[5, 1]des-[2, 7]
最后俩个人过去的是:5和1
第3种情况=======================总共花的时间是:16
i=0-1,j=2-5
先这俩个人过去:1和5
这时从桥尾回来的是:1
[2, 7, 1]des+[5]
入口:src-[2, 7, 1]des-[5]
i=0-2,j=1-7
先这俩个人过去:2和7
这时从桥尾回来的是:2
[1, 2]des+[5, 7]
入口:src-[1, 2]des-[5, 7]
最后俩个人过去的是:1和2
第4种情况=======================总共花的时间是:17
i=0-2,j=2-1
先这俩个人过去:2和1
这时从桥尾回来的是:1
[7, 1]des+[5, 2]
入口:src-[7, 1]des-[5, 2]
最后俩个人过去的是:7和1
第5种情况=======================总共花的时间是:16
i=1-7,j=2-1
先这俩个人过去:7和1
这时从桥尾回来的是:1
[2, 1]des+[5, 7]
入口:src-[2, 1]des-[5, 7]
最后俩个人过去的是:2和1
第6种情况=======================总共花的时间是:16
i=0-1,j=3-7
先这俩个人过去:1和7
这时从桥尾回来的是:1
[2, 5, 1]des+[7]
入口:src-[2, 5, 1]des-[7]
i=0-2,j=1-5
先这俩个人过去:2和5
这时从桥尾回来的是:2
[1, 2]des+[7, 5]
入口:src-[1, 2]des-[7, 5]
最后俩个人过去的是:1和2
第7种情况=======================总共花的时间是:17
i=0-2,j=2-1
先这俩个人过去:2和1
这时从桥尾回来的是:1
[5, 1]des+[7, 2]
入口:src-[5, 1]des-[7, 2]
最后俩个人过去的是:5和1
第8种情况=======================总共花的时间是:16
i=1-5,j=2-1
先这俩个人过去:5和1
这时从桥尾回来的是:1
[2, 1]des+[7, 5]
入口:src-[2, 1]des-[7, 5]
最后俩个人过去的是:2和1
第9种情况=======================总共花的时间是:16
i=1-2,j=2-5
先这俩个人过去:2和5
这时从桥尾回来的是:2
[1, 7, 2]des+[5]
入口:src-[1, 7, 2]des-[5]
i=0-1,j=1-7
先这俩个人过去:1和7
这时从桥尾回来的是:1
[2, 1]des+[5, 7]
入口:src-[2, 1]des-[5, 7]
最后俩个人过去的是:2和1
第10种情况=======================总共花的时间是:17
i=0-1,j=2-2
先这俩个人过去:1和2
这时从桥尾回来的是:1
[7, 1]des+[5, 2]
入口:src-[7, 1]des-[5, 2]
最后俩个人过去的是:7和1
第11种情况=======================总共花的时间是:17
i=1-7,j=2-2
先这俩个人过去:7和2
这时从桥尾回来的是:2
[1, 2]des+[5, 7]
入口:src-[1, 2]des-[5, 7]
最后俩个人过去的是:1和2
第12种情况=======================总共花的时间是:18
i=1-2,j=3-7
先这俩个人过去:2和7
这时从桥尾回来的是:2
[1, 5, 2]des+[7]
入口:src-[1, 5, 2]des-[7]
i=0-1,j=1-5
先这俩个人过去:1和5
这时从桥尾回来的是:1
[2, 1]des+[7, 5]
入口:src-[2, 1]des-[7, 5]
最后俩个人过去的是:2和1
第13种情况=======================总共花的时间是:17
i=0-1,j=2-2
先这俩个人过去:1和2
这时从桥尾回来的是:1
[5, 1]des+[7, 2]
入口:src-[5, 1]des-[7, 2]
最后俩个人过去的是:5和1
第14种情况=======================总共花的时间是:17
i=1-5,j=2-2
先这俩个人过去:5和2
这时从桥尾回来的是:2
[1, 2]des+[7, 5]
入口:src-[1, 2]des-[7, 5]
最后俩个人过去的是:1和2
第15种情况=======================总共花的时间是:18
i=2-5,j=3-7
先这俩个人过去:5和7
这时从桥尾回来的是:5
[1, 2, 5]des+[7]
入口:src-[1, 2, 5]des-[7]
i=0-1,j=1-2
先这俩个人过去:1和2
这时从桥尾回来的是:1
[5, 1]des+[7, 2]
入口:src-[5, 1]des-[7, 2]
最后俩个人过去的是:5和1
第16种情况=======================总共花的时间是:20
i=0-1,j=2-5
先这俩个人过去:1和5
这时从桥尾回来的是:1
[2, 1]des+[7, 5]
入口:src-[2, 1]des-[7, 5]
最后俩个人过去的是:2和1
第17种情况=======================总共花的时间是:20
i=1-2,j=2-5
先这俩个人过去:2和5
这时从桥尾回来的是:2
[1, 2]des+[7, 5]
入口:src-[1, 2]des-[7, 5]
最后俩个人过去的是:1和2
第18种情况=======================总共花的时间是:21
-------14

原创粉丝点击