穷举法就是列举出所有的情况。如:泊松算法

一 泊松分酒

假设有三个杯子,不同的大小 ,三个杯子大小为:12L、8L、5L 。
目的:希望用这三个杯子,来量出一定量的酒
条件:初始酒量: 12L、0L、0L

  1. public class PoissonShareWine {
  2. //三个容器的容量
  3. private int b1 = 12;
  4. private int b2 = 8;
  5. private int b3 = 5;
  6. private int m = 6;//目标值
  7. //各个酒杯的初始状态的酒量
  8. //倒酒的时候,必须要有一定的倒酒策略,否则将会是一场灾难(死循环)
  9. private void pourBottle(int bb1,int bb2,int bb3) {
  10. System.out.println("bb1:"+bb1+";bb2:"+bb2+";bb3:"+bb3);
  11. //b1--->b2--->b3---b1
  12. if(bb1 == m||bb2 ==m||bb3 == m) {
  13. System.out.println("find the bottle");
  14. return;
  15. }
  16. if(bb2!=0&&bb3!=b3) {
  17. if(bb2+bb3<=b3) {
  18. //倒不满
  19. pourBottle(bb1, 0, bb2+bb3);
  20. }else {
  21. pourBottle(bb1, bb2-b3+bb3, b3);
  22. }
  23. }else if(bb3 == b3) {
  24. //酒杯3满了,则往酒杯1倒
  25. if(bb3 + bb1<=b1) {
  26. //说明酒杯1没有满
  27. pourBottle(bb1+bb3, bb2, 0);
  28. }else {
  29. pourBottle(b1, bb2, bb3-(b1-bb1));
  30. }
  31. }else if(bb2 == 0) {
  32. //从酒杯1往酒杯2里倒酒
  33. if(bb1>=b2) {
  34. pourBottle(bb1-b2, b2, bb3);
  35. }else {
  36. pourBottle(0, bb1, bb3);
  37. }
  38. }
  39. }
  40. public static void main(String[] args) {
  41. PoissonShareWine poissonShareWine = new PoissonShareWine();
  42. poissonShareWine.pourBottle(12, 0, 0);
  43. }
  44. }