Wieże Hanoi to problem polegający na przełożeniu z jednego słupka, na drugi, dysków o różnej średnicy. Przy przekładaniu można posługiwać się dodatkowym słupkiem stanowiącym bufor. Nie można kłaść dysku o większej średnicy na dysk o mniejszej średnicy, ani przekładać więcej niż jednego dysku jednocześnie. Chcemy napisać aplikację, która zasymuluje nam kolejne kroki potrzebne do przełożenia dysków. Zastosujemy algorytm rekurencyjny.
// wykorzystujemy klasę Scanner z pakietu java.util
import java.util.*;
/**
* Wieże Hanoi - rozwiązanie rekurencyjne
* @author kodatnik.blogspot.com
*/
public class WiezeHanoi {
// Rekurencyjna metoda przekładająca dyski o parametrach
// dyski - liczba dysków
// skad - oznaczenie słupka początkowego
// dokad - oznaczenie słupka docelowego
// bufor - oznaczenie słupka pomocniczego
public static void hanoi(int dyski, char skad, char dokad, char bufor) {
// jeśli są dyski
if (dyski > 0 ) {
// przenieś (rekurencyjnie) n-1 dysków ze słupka A na słupek B posługując się słupkiem C
hanoi(dyski - 1, skad, bufor, dokad);
// wyświetl przeniesienie dysku
System.out.println(skad + " > " + dokad);
// przenieś (rekurencyjnie) n-1 dysków ze słupka B na słupek C posługując się słupkiem A
hanoi(dyski - 1, bufor, dokad, skad);
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print ("Ile dysków chcesz przełożyć: " );
// pobieramy od użytkownika liczbę dysków
int n = sc.nextInt();
// wywołujemy metodę wyświetlającą kolejne przełożenia dysków
// ze słupka A na słupek C korzystając ze słupka B
hanoi(n , 'A', 'C', 'B');
}
}
Uruchomiona aplikacja:
Ile dysków chcesz przełożyć: 4
A > B
A > C
B > C
A > B
C > A
C > B
A > B
A > C
B > C
B > A
C > A
B > C
A > B
A > C
B > C
1 Komentarz - Wieże Hanoi
dobry blog
Prześlij komentarz
Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)