Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen

Bitte aktiviere JavaScript!
Hallo,

Ich habe ein Problem, welches ich nicht lösen kann.
Ich muss ein Programm für Hanoi Türme in Java schreiben.
Dieses Programm solle von beliebige aber valide start die Scheiben an das Ziel Stab
stecken.
valid meine ich damit, dass man kleine scheibe oberhalb der größere scheiben liegen muss.

Also z.B es könnte solche Ausgangsposition geben StabA hat 6,5,4 StabB 7,3 StabC 2,1
Das Programm muss das Problem rekursiv lösen.

Für jeden kleine Tipp bin ich dankbar.
 
A

Anzeige




Schau mal hier —> (hier klicken)
Ich habs mal versucht. Es scheint zu funktionieren.
Java:
import java.util.ArrayList;
import java.util.List;

public class Hanoi {
  static int removeLast(List<Integer> list) {
    int last = list.get(list.size() - 1);
    list.remove(list.size() - 1);
    return last;
  }
 
  static void moveOne(List<Integer> list1, List<Integer> list2) {
    list2.add(removeLast(list1));
  }
 
  static void print(List<List<Integer>> poles) {
    int height = 0;
    for(var pole: poles) {
      if(pole.size() > height) height = pole.size();
    }
    for(int h = height - 1; h >= 0; h--) {
      for(var pole: poles) {
        if(pole.size() > h) {
          System.out.print(pole.get(h));
        } else {
          System.out.print(" ");
        }
        System.out.print(" ");
      }
      System.out.println();
    }
    System.out.println();
  }
 
  static void move(List<List<Integer>> poles, int maxDiskSize, int destPole) {
    if(maxDiskSize < 1) return;
    int fromPole = 0;
    loop:
    for(; fromPole < poles.size(); fromPole++) {
      for(int diskNr = 0; diskNr < poles.get(fromPole).size(); diskNr++) {
        if(poles.get(fromPole).get(diskNr) == maxDiskSize) break loop;
      }
    }
    if(fromPole == destPole) {
      move(poles, maxDiskSize - 1, destPole);
    } else {
      int mid = 0;
      while(mid == destPole || mid == fromPole) mid++;
      move(poles, maxDiskSize - 1, mid);
      moveOne(poles.get(fromPole), poles.get(destPole));
      print(poles);
      move(poles, maxDiskSize - 1, destPole);
    }
  }
 
  public static void main(String[] args) {
    List<List<Integer>> poles = new ArrayList<>();
    poles.add(new ArrayList<>(List.of(6,5,4)));
    poles.add(new ArrayList<>(List.of(7,3)));
    poles.add(new ArrayList<>(List.of(2,1)));
    print(poles);
   
    move(poles, 7, 2);
  }
}
 
A

Anzeige




Vielleicht hilft dir das hier weiter: (klicke hier)
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben