gon2

Untitled

Feb 12th, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.21 KB | None | 0 0
  1. import edu.princeton.cs.algs4.StdOut;
  2. import edu.princeton.cs.algs4.Stack;
  3.  
  4. public class Hanoi {
  5.     /*
  6.     Táknar eina ákveðna uppsetningu á Hanoi þrautinni.
  7.     */
  8.  
  9.     private Stack<Integer> left;
  10.     private Stack<Integer> middle;
  11.     private Stack<Integer> right;
  12.     private int n;
  13.     private int skref = -1; //verður 0 fyrir upphafsprentið sem við teljum ekki með sem skref.
  14.  
  15.     public Hanoi(int n) {
  16.         /*
  17.         Upphafsstillir þrautina með n skífum.
  18.          */
  19.         this.n = n;
  20.         this.left = new Stack<>();
  21.         this.middle = new Stack<>();
  22.         this.right = new Stack<>();
  23.  
  24.         for (int i = n; 0 < i; i--) {
  25.             this.left.push(i);
  26.         }
  27.         this.displayState();
  28.     }
  29.  
  30.     /* samkvæmt Wikipedia er stysta ítrunarleiðin A-C, A-B, B-C. Lausnin mín ætti að vera almenn og virka fyrir
  31.        hvaða n sem er og ætti ekki að skipta máli frá hvaða stack við byrjum */
  32.     public void solve() {
  33.       int i = 1;
  34.  
  35.       // fyrsta umferð, gerum löglega move-ið frá A-C, A-B, B-C:
  36.       if (this.left.size() > this.right.size()) {this.left.pop(); this.right.push(i);}
  37.       if (this.right.size() > this.left.size()) {this.right.pop(); this.left.push(i);}
  38.       this.displayState();
  39.       // ef vinstri og þriðji eru núll:
  40.       if (this.middle.size() > 0) {this.middle.pop(); this.left.push(i);}
  41.       // ef ekki:
  42.       else {this.left.pop(); this.middle.push(i+1);}
  43.       this.displayState();
  44.       //B-C:
  45.       if (this.right.size() > this.middle.size()) {this.right.push(this.middle.peek()); this.middle.pop();}
  46.       else {this.middle.push(this.right.peek()); this.right.pop();}
  47.       this.displayState();
  48.  
  49.       // allar aðrar umferðir:
  50.       while (true) {
  51.         // löglega move-ið frá A-C:
  52.         if (this.left.size() > 0 && this.right.size() > 0) { // annars virkar peek ekki
  53.           if (this.left.peek() < this.right.peek()) {this.right.push(this.left.peek()); this.left.pop();}
  54.           else {this.left.push(this.right.peek()); this.right.pop();}
  55.         } else {
  56.           if (this.left.size() == 0 && this.right.size() == 0) break; // ef 0 á tveimur stöðum er þetta búið!
  57.           else if (this.left.size() == 0) {this.left.push(this.right.peek()); this.right.pop();}
  58.           else {this.right.push(this.left.peek()); this.left.pop();}
  59.         }
  60.         this.displayState();
  61.  
  62.         // löglega move-ið frá A-B:
  63.         if (this.left.size() > 0 && this.middle.size() > 0) { // annars virkar peek ekki
  64.           if (this.left.peek() < this.middle.peek()) {this.middle.push(this.left.peek()); this.left.pop();}
  65.           else {this.left.push(this.middle.peek()); this.middle.pop();}
  66.         } else {
  67.           if (this.left.size() == 0 && this.middle.size() == 0) break; // ef 0 á tveimur stöðum er þetta búið!
  68.           else if (this.left.size() == 0) {this.left.push(this.middle.peek()); this.middle.pop();}
  69.           else {this.middle.push(this.left.peek()); this.left.pop();}
  70.         }
  71.         this.displayState();
  72.  
  73.         // löglega move-ið frá B-C:
  74.         if (this.middle.size() > 0 && this.right.size() > 0) { // annars virkar peek ekki
  75.           if (this.middle.peek() < this.right.peek()) {
  76.             this.right.push(this.middle.peek()); this.middle.pop();
  77.           } else {
  78.             this.middle.push(this.right.peek()); this.right.pop();
  79.           }
  80.         } else {
  81.           if (this.right.size() == 0 && this.middle.size() == 0) break; // ef 0 á tveimur stöðum er þetta búið!
  82.           else if (this.middle.size() == 0) {this.middle.push(this.right.peek()); this.right.pop();}
  83.           else {this.right.push(this.middle.peek()); this.middle.pop();}
  84.         }
  85.         this.displayState();
  86.       }
  87.     }
  88.  
  89.     private void displayState() {
  90.         StdOut.println("Vinstri : " +  this.left.toString());
  91.         StdOut.println("Miðja   : " +  this.middle.toString());
  92.         StdOut.println("Hægri   : " + this.right.toString());
  93.         StdOut.println("#####################");
  94.         skref++;
  95.     }
  96.  
  97.     public static void main(String[] args) {
  98.         Hanoi h = new Hanoi(3);
  99.         h.solve();
  100.         System.out.println("Skrefafjöldi: " + h.skref);
  101.     }
  102.  
  103. }
Advertisement
Add Comment
Please, Sign In to add comment