Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Hanoi hanoi = new Hanoi();
  6. hanoi.run();
  7. }
  8.  
  9. }
  10.  
  11. class Hanoi
  12. {
  13. private HanoiTower[] towers;
  14. private int numOfDisks;
  15. private int turns;
  16.  
  17. private Scanner scanner;
  18.  
  19. public Hanoi()
  20. {
  21. turns = 0;
  22.  
  23. scanner = new Scanner(System.in);
  24.  
  25. System.out.println("Enter number of disks : ");
  26. numOfDisks = scanner.nextInt();
  27.  
  28. towers = new HanoiTower[3];
  29. for (int i = 0; i < 3; i++)
  30. {
  31. towers[i] = new HanoiTower(numOfDisks);
  32. }
  33. towers[0].insertAllDisks();
  34. }
  35. public void run()
  36. {
  37. turns = 0;
  38. executeTurn(numOfDisks, towers[0], towers[1], towers[2]);
  39. System.out.println("Minimum number of moves : " + turns);
  40. }
  41. private void executeTurn(int n, HanoiTower source, HanoiTower via, HanoiTower dest)
  42. {
  43. if (n > 0)
  44. {
  45. executeTurn(n - 1, source, dest, via);
  46.  
  47. dest.insertDisk(source.removeDisk());
  48. turns++;
  49. draw();
  50.  
  51. executeTurn(n - 1, via, source, dest);
  52. }
  53. }
  54. public void draw()
  55. {
  56. System.out.println();
  57. int n = numOfDisks;
  58. for (int i = n-1; i >= 0; i--)
  59. {
  60. drawDisk(n, towers[0].getDisks()[i]);
  61. System.out.print("\t");
  62. drawDisk(n, towers[1].getDisks()[i]);
  63. System.out.print("\t");
  64. drawDisk(n, towers[2].getDisks()[i]);
  65. System.out.println();
  66. }
  67. System.out.println();
  68. }
  69.  
  70. private void drawDisk(int n, int diskSize)
  71. {
  72. for (int i = 0; i <= 2*n; i++)
  73. {
  74. if (i < n - diskSize || i > n + diskSize)
  75. {
  76. System.out.print(' ');
  77. }
  78. else if (i != n)
  79. {
  80. System.out.print('*');
  81. }
  82. else
  83. {
  84. System.out.print('|');
  85. }
  86. }
  87. }
  88.  
  89. public int getNumOfDisks() { return numOfDisks; }
  90. public int getTurns() { return turns; }
  91. }
  92.  
  93. class HanoiTower
  94. {
  95. private final int maxDisks;
  96. private int[] disks;
  97. private int diskCount;
  98.  
  99. public HanoiTower(int maxDisks) {
  100. this.maxDisks = maxDisks;
  101. disks = new int[maxDisks];
  102. }
  103.  
  104. public void insertAllDisks() {
  105. for (int i = 0; i < maxDisks; i++) {
  106. disks[i] = maxDisks - i;
  107. }
  108. diskCount = maxDisks;
  109. }
  110.  
  111. public void insertDisk(int diskSize) {
  112. if (diskCount == maxDisks) {
  113. System.out.println("Tower is full!");
  114. return;
  115. }
  116. disks[diskCount] = diskSize;
  117. diskCount++;
  118. }
  119.  
  120. public int removeDisk() {
  121. if (diskCount == 0) {
  122. System.out.println("Tower is empty!");
  123. return 0;
  124. }
  125. int removedDisk = disks[diskCount - 1];
  126. disks[diskCount - 1] = 0;
  127. diskCount--;
  128. return removedDisk;
  129. }
  130.  
  131. // getters
  132. public int[] getDisks() { return disks; }
  133. public int getDiskCount() { return maxDisks; }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement