四个女人过河

四个女人过桥,夜间有一火把,每次最多过两个,必需带火把,
过桥速度不一样
no.1 1min
no.2 2min
no.3 5min
no.4 10min
两个人过用最慢一个的速度,火把不能扔
如何在17min内四个女人都过桥

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

public class GoRriver {
	List<Woman> leftWomanList = null;
	List<Woman> rightWomanList = null;
	int times = 0;
	boolean hb = true;// 表示火把在左边
	final int size = 4;

	public GoRriver() {
		leftWomanList = new ArrayList<Woman>(size);
		rightWomanList = new ArrayList<Woman>(size);

		leftWomanList.add(new Woman(1, 1));
		leftWomanList.add(new Woman(2, 2));
		leftWomanList.add(new Woman(3, 5));
		leftWomanList.add(new Woman(4, 10));

	}

	void go() {
		while (leftWomanList.size() > 0) {
			if (rightWomanList.size() == 0) {
				goMinRight();
			} else {
				if (hb) {// 火把在左边
					Woman leftMinWoman = getMinWoman(leftWomanList);
					Woman rightMinWoman = getMinWoman(rightWomanList);
					if (leftMinWoman.getTime() < rightMinWoman.getTime()) {// 如果左岸过桥时间最短的比右岸过桥时间最短的还短,则派两个时间最长的妇女过岸
						goMaxRight();
					} else {
						goMinRight();
					}
				} else {// 火把在右边
					backLeft();
				}
			}
		}
	}

	private void backLeft() {
		Woman minWoman = getMinWoman(rightWomanList);
		System.out.println("派妇女:" + minWoman.getId() + "," + minWoman.getTime() + "送火把");
		rightWomanList.remove(minWoman);
		leftWomanList.add(minWoman);
		times += minWoman.getTime();
		hb = true;
		System.out.println("================");
	}

	private void goMaxRight() {
		Woman firstWoman = getMaxWoman(leftWomanList);
		leftWomanList.remove(firstWoman);
		System.out.println("派妇女:" + firstWoman.getId() + "," + firstWoman.getTime() + "去对岸");
		Woman secondWoman = getMaxWoman(leftWomanList);
		leftWomanList.remove(secondWoman);
		System.out.println("派妇女:" + secondWoman.getId() + "," + secondWoman.getTime() + "去对岸");

		rightWomanList.add(firstWoman);
		rightWomanList.add(secondWoman);

		times += firstWoman.getTime();
		hb = false;
	}

	private void goMinRight() {
		Woman firstWoman = getMinWoman(leftWomanList);
		leftWomanList.remove(firstWoman);
		System.out.println("派妇女:" + firstWoman.getId() + "," + firstWoman.getTime() + "去对岸");
		Woman secondWoman = getMinWoman(leftWomanList);
		leftWomanList.remove(secondWoman);
		System.out.println("派妇女:" + secondWoman.getId() + "," + secondWoman.getTime() + "去对岸");

		rightWomanList.add(firstWoman);
		rightWomanList.add(secondWoman);

		times += secondWoman.getTime();
		hb = false;
	}

	Woman getWoman(List<Woman> list, int id) {
		for (Woman woman : list) {
			if (woman.getId() == id) {
				return woman;
			}
		}
		return null;
	}

	Woman getMinWoman(List<Woman> list) {
		Woman minWoman = list.get(0);
		for (Woman woman : list) {
			if (woman.getTime() < minWoman.getTime()) {
				minWoman = woman;
			}
		}
		return minWoman;
	}

	Woman getMaxWoman(List<Woman> list) {
		Woman maxWoman = list.get(0);
		for (Woman woman : list) {
			if (woman.getTime() > maxWoman.getTime()) {
				maxWoman = woman;
			}
		}
		return maxWoman;
	}

	public static void main(String[] args) {
		GoRriver goRevier = new GoRriver();
		goRevier.go();
		System.out.println("=================");
		System.out.println("总共花费:"+goRevier.times);
	}
}


你可能感兴趣的:(Go)