Wieże Hanoi

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


0 Komentarzy - Wieże Hanoi

Prześlij komentarz

Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)

Popularne posty