Write a program in java that solves the Towers of Hanoi problem using recursion.
ID: 3671632 • Letter: W
Question
Write a program in java that solves the Towers of Hanoi problem using recursion. (No hard-coding!) The user must be able to specify the number of starting disks (2 < n < 8). At the start and each time a disk is moved, you should output the state of the entire domain so it is clear which disk was moved and to where. You may represent each disk with graphics (as in the image above) or with an integer (smaller numbers indicate smaller disks). For example, a starting state representation may look like this:
Peg 1 | 3, 2, 1
Peg 2 |
Peg 3 |
Explanation / Answer
package assignment;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class TowersOfHanoi {
private ArrayList<Integer> peg1;
private ArrayList<Integer> peg2;
private ArrayList<Integer> peg3;
public TowersOfHanoi(int discs) {
peg1 = new ArrayList<Integer>();
peg2 = new ArrayList<Integer>();
peg3 = new ArrayList<Integer>();
//InitialState
for(int i =discs; i >= 1; i--)
peg1.add(i);
}
public void hanoitowers(int n, int startPeg, int auxiliaryPeg, int endPeg) {
System.out.println(" Peg1 "+peg1.toString()+" | Peg2 "+peg2.toString()+" | Peg3 "+peg3.toString());
if (n == 1) {
// System.out.println("P"+startPeg + " -> " + "P"+endPeg);
changeDiscsInPegs(startPeg, endPeg);
System.out.println(" Peg1 "+peg1.toString()+" | Peg2 "+peg2.toString()+" | Peg3 "+peg3.toString());
} else {
hanoitowers(n - 1, startPeg, endPeg, auxiliaryPeg);
// System.out.println("P"+startPeg + " -> " + "P"+endPeg);
changeDiscsInPegs(startPeg, endPeg);
hanoitowers(n - 1, auxiliaryPeg, startPeg, endPeg);
}
}
private void changeDiscsInPegs(int from, int to) {
ArrayList<Integer> srcPeg;
ArrayList<Integer> destPeg;
srcPeg = from == 1 ? peg1 : (from == 2 ? peg2 : peg3);
destPeg = to == 1 ? peg1 : (to == 2 ? peg2 : peg3);
int index = srcPeg.size()-1;
destPeg.add(srcPeg.get(index));
srcPeg.remove(index);
}
public static void main(String[] args) {
System.out.print("Enter number of discs: (2 < n <8) ");
Scanner scanner = new Scanner(System.in);
int discs = 2;
while(discs < 3 || discs > 7) {
discs = scanner.nextInt();
if(discs < 3 || discs > 7)
System.out.print("Enter number of discs: (2 < n <8) ");
}
TowersOfHanoi towersOfHanoi = new TowersOfHanoi(discs);
towersOfHanoi.hanoitowers(discs, 1, 2, 3);
}
}
---output----
Enter number of discs: (2 < n <8) 2
Enter number of discs: (2 < n <8) 9
Enter number of discs: (2 < n <8) 8
Enter number of discs: (2 < n <8) 3
Peg1 [3, 2, 1] | Peg2 [] | Peg3 []
Peg1 [3, 2, 1] | Peg2 [] | Peg3 []
Peg1 [3, 2, 1] | Peg2 [] | Peg3 []
Peg1 [3, 2] | Peg2 [] | Peg3 [1]
Peg1 [3] | Peg2 [2] | Peg3 [1]
Peg1 [3] | Peg2 [2, 1] | Peg3 []
Peg1 [] | Peg2 [2, 1] | Peg3 [3]
Peg1 [] | Peg2 [2, 1] | Peg3 [3]
Peg1 [1] | Peg2 [2] | Peg3 [3]
Peg1 [1] | Peg2 [] | Peg3 [3, 2]
Peg1 [] | Peg2 [] | Peg3 [3, 2, 1]
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.