Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.07.2006, 19:06

Tower of Hanoi - Algorithmus

Bin heute zufällig darauf gestossen http://www.mathsisfun.com/games/towerofhanoi.html

Nun habe ich einen Algorithmus geschrieben der das umstapeln für mich erledigt. Das macht er auch einwandfrei, nur bin ich mir nicht sicher ob das nicht auch in weniger Schritten lösbar wäre.

Wäre toll wenn sich einer von euch auch mal daran versuchen könnte und seine Lösung hier posten würde!
Always remember to keep yourself alive

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

15.07.2006, 20:26

Warum zeigst du nicht erstmal deine Lösung? Dann stossen wir dich schon drauf wo man was anders machen könnte. Abgesehen davon ist das Problem ja "uralt", da gibt es ne Menge Algorythmen unterschiedlicher Qualität für und auch ne Menge Material. Google ist dein Freund ;)

3

15.07.2006, 20:45

So habe ich es gelöst:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Verschiebt eine Scheibe

void TM2Stack(int from, int to);

//rekursive Funktion die das umstapeln erledigt

void MoveTower(int from, int to, int height){

//Abbruchbedingung

if(height<2){
   TM2Stack(from,to);
   return;
}

int free = from + to;
free = free-(free-3)*2;

MoveTower(from, free, height-1);
TM2Stack(from, to);
MoveTower(free, to, height-1);

}
Always remember to keep yourself alive

Anonymous

unregistriert

5

15.07.2006, 21:33

Ageless Stranger
Bissel edler und vorallem: Lesbarer.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const unsigned long okay = 0x00000000L;

    //Verschiebt eine Scheibe 

unsigned long move_entity (unsigned long from, unsigned long to); 

    //rekursive Funktion die das umstapeln erledigt 

unsigned long move_tower (unsigned long from, unsigned long to, unsigned long height)
{ 
        // Abbruchbedingung 

    if (height < 2)
        return (move_entity (from, to));

    unsigned long free = from + to - ((from + to - 3) << 1);

    move_tower  (from, free, height-1); 
    move_entity (from, to); 
    move_tower  (free, to, height-1); 

    return (okay);
}

Werbeanzeige