pastebin light

pastebin is a collaborative debugging tool allowing you to share and modify code snippets while chatting on IRC, IM or a message board.

pastebin light //misacek

Posted by miscan.wide.java on Sun 16 Oct 2011 0:04:37 CEST
download | new post

  1.  
  2. import java.util.*;
  3.  
  4. class Variant {
  5.  
  6. static Vector<Variant> variants;
  7. Vector<Variant> successors;
  8.  
  9. int m_a;
  10. int m_b;
  11. int c_a;
  12. int c_b;
  13. boolean boat;
  14.  
  15. Variant(int m_a, int c_a, int m_b, int c_b, boolean boat) {
  16. this.m_a = m_a;
  17. this.m_b = m_b;
  18. this.c_a = c_a;
  19. this.c_b = c_b;
  20. this.boat = boat;
  21. this.successors = new Vector<Variant>();
  22. variants.add(this);
  23. int s = (boat == false) ? -1 : 1;
  24. negotiate_successor(m_a + s*2, c_a + s*0, m_b - s*2, c_b - s*0, !boat);
  25. negotiate_successor(m_a + s*1, c_a + s*0, m_b - s*1, c_b - s*0, !boat);
  26. negotiate_successor(m_a + s*1, c_a + s*1, m_b - s*1, c_b - s*1, !boat);
  27. negotiate_successor(m_a + s*0, c_a + s*1, m_b - s*0, c_b - s*1, !boat);
  28. negotiate_successor(m_a + s*0, c_a + s*2, m_b - s*0, c_b - s*2, !boat);
  29. }
  30.  
  31. void negotiate_successor(int m_a, int c_a, int m_b, int c_b, boolean boat) {
  32. if ((m_a > 0 && m_a < c_a) ||
  33. (m_b > 0 && m_b < c_b) ||
  34. m_a < 0 || m_b < 0 || c_a < 0 || c_b < 0)
  35. return;
  36. Variant v = Variant.exists(m_a, c_a, m_b, c_b, boat);
  37. if (v == null)
  38. v = new Variant(m_a, c_a, m_b, c_b, boat);
  39. this.successors.add(v);
  40.  
  41. }
  42.  
  43. boolean equals(int m_a, int c_a, int m_b, int c_b, boolean boat) {
  44. return (this.m_a == m_a && this.m_b == m_b && this.c_a == c_a && this.c_b == c_b && this.boat == boat);
  45. }
  46.  
  47. boolean equals(Variant v) {
  48. return this.equals(v.m_a, v.c_a, v.m_b, v.c_b, v.boat);
  49. }
  50.  
  51. boolean is_solved() {
  52. return (this.m_b == Game.MISSIONARIES && this.c_b == Game.CANNIBALS && this.boat == true);
  53. }
  54.  
  55. static Variant exists(int m_a, int c_a, int m_b, int c_b, boolean boat) {
  56. Enumeration i = Variant.variants.elements();
  57. while(i.hasMoreElements()) {
  58. Variant v = (Variant)(i.nextElement());
  59. if (v.equals(m_a,c_a,m_b,c_b,boat))
  60. return v;
  61. }
  62. return null;
  63. }
  64.  
  65. static void list_variants() {
  66. System.out.println(Variant.variants.size() + " variants total:");
  67. Enumeration i = Variant.variants.elements();
  68. while(i.hasMoreElements())
  69. ((Variant)(i.nextElement())).info();
  70. }
  71.  
  72. void info() {
  73. System.out.println("[" + this.m_a + " " + this.c_a + " " + this.m_b + " " + this.c_b + " " + this.boat + "]");
  74. }
  75.  
  76. }
  77.  
  78. class Path {
  79.  
  80. static Vector<Path> paths;
  81. Vector<Variant> path;
  82. boolean block;
  83.  
  84. Path(Variant v, Path p) {
  85.  
  86. block = false;
  87.  
  88. if (p != null)
  89. this.path = (Vector)(p.path.clone());
  90. else
  91. this.path = new Vector<Variant>();
  92.  
  93. if (!this.has_variant(v))
  94. path.add(v);
  95. else block = true;
  96.  
  97. }
  98.  
  99. void info() {
  100. System.out.println("Path (number of elements: " + (path.size()-1) + ")");
  101. Enumeration e = path.elements();
  102. while (e.hasMoreElements())
  103. ((Variant)(e.nextElement())).info();
  104. }
  105.  
  106. boolean has_variant(Variant v) {
  107. Enumeration i = path.elements();
  108. while (i.hasMoreElements())
  109. if (((Variant)(i.nextElement())).equals(v))
  110. return true;
  111. return false;
  112. }
  113.  
  114. void probe() {
  115. Variant v = path.lastElement();
  116. if (v.is_solved())
  117. {
  118. System.out.print("Found valid ");
  119. info();
  120. }
  121.  
  122. if (this.block)
  123. return;
  124.  
  125. else {
  126. Enumeration i = v.successors.elements();
  127. while(i.hasMoreElements()) {
  128. Path p = null;
  129. p = new Path((Variant)(i.nextElement()), this);
  130. if (p != null)
  131. Path.paths.add(p);
  132. }
  133. }
  134.  
  135. }
  136.  
  137. }
  138.  
  139. public class Game {
  140.  
  141. public static final int MISSIONARIES = 3;
  142. public static final int CANNIBALS = 3;
  143.  
  144. public static void main(String[] args) {
  145. Path.paths = new Vector<Path>();
  146. Variant.variants = new Vector<Variant>();
  147. Variant top = new Variant(3,3,0,0,false);
  148. Variant.list_variants();
  149. Path.paths.add(new Path(top, null));
  150. Enumeration e = Path.paths.elements();
  151. while (e.hasMoreElements())
  152. ((Path)(e.nextElement())).probe();
  153.  
  154. }
  155.  
  156. }
  157.  

Syntax highlighting: