Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- Hanoi hanoi = new Hanoi();
- hanoi.run();
- }
- }
- class Hanoi
- {
- private HanoiTower[] towers;
- private int numOfDisks;
- private int turns;
- private Scanner scanner;
- public Hanoi()
- {
- turns = 0;
- scanner = new Scanner(System.in);
- System.out.println("Enter number of disks : ");
- numOfDisks = scanner.nextInt();
- towers = new HanoiTower[3];
- for (int i = 0; i < 3; i++)
- {
- towers[i] = new HanoiTower(numOfDisks);
- }
- towers[0].insertAllDisks();
- }
- public void run()
- {
- turns = 0;
- executeTurn(numOfDisks, towers[0], towers[1], towers[2]);
- System.out.println("Minimum number of moves : " + turns);
- }
- private void executeTurn(int n, HanoiTower source, HanoiTower via, HanoiTower dest)
- {
- if (n > 0)
- {
- executeTurn(n - 1, source, dest, via);
- dest.insertDisk(source.removeDisk());
- turns++;
- draw();
- executeTurn(n - 1, via, source, dest);
- }
- }
- public void draw()
- {
- System.out.println();
- int n = numOfDisks;
- for (int i = n-1; i >= 0; i--)
- {
- drawDisk(n, towers[0].getDisks()[i]);
- System.out.print("\t");
- drawDisk(n, towers[1].getDisks()[i]);
- System.out.print("\t");
- drawDisk(n, towers[2].getDisks()[i]);
- System.out.println();
- }
- System.out.println();
- }
- private void drawDisk(int n, int diskSize)
- {
- for (int i = 0; i <= 2*n; i++)
- {
- if (i < n - diskSize || i > n + diskSize)
- {
- System.out.print(' ');
- }
- else if (i != n)
- {
- System.out.print('*');
- }
- else
- {
- System.out.print('|');
- }
- }
- }
- public int getNumOfDisks() { return numOfDisks; }
- public int getTurns() { return turns; }
- }
- class HanoiTower
- {
- private final int maxDisks;
- private int[] disks;
- private int diskCount;
- public HanoiTower(int maxDisks) {
- this.maxDisks = maxDisks;
- disks = new int[maxDisks];
- }
- public void insertAllDisks() {
- for (int i = 0; i < maxDisks; i++) {
- disks[i] = maxDisks - i;
- }
- diskCount = maxDisks;
- }
- public void insertDisk(int diskSize) {
- if (diskCount == maxDisks) {
- System.out.println("Tower is full!");
- return;
- }
- disks[diskCount] = diskSize;
- diskCount++;
- }
- public int removeDisk() {
- if (diskCount == 0) {
- System.out.println("Tower is empty!");
- return 0;
- }
- int removedDisk = disks[diskCount - 1];
- disks[diskCount - 1] = 0;
- diskCount--;
- return removedDisk;
- }
- // getters
- public int[] getDisks() { return disks; }
- public int getDiskCount() { return maxDisks; }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement