Ich lese ein paar der Diskussionen über die Türme von Hanoi Problem durch. Ich verstehe die rekursive Lösung mit dem folgenden Code:Türme von Hanoi Frage
void Hanoi3(int nDisks, char source, char intermed, char dest)
{
if(nDisks == 1){
cout << "Move the plate from " << source << " to " << dest << endl;
}
else{
Hanoi3(nDisks - 1, source, dest, intermed);
cout << "Move the plate from " << source << " to " << dest << endl;
Hanoi3(nDisks - 1, dest, intermed, source);
}
}
Was ich brauche eigentlich zu tun, um ausgegeben irgendeine Art von „Abbildung“ des Turms bei jedem Schritt. Ich habe große Schwierigkeiten damit. Unser Kursleiter schlug vor, Stacks zu verwenden, um zu verfolgen, welche Disk in welchem Tower ist, aber ich habe Probleme beim Ausgeben, da das Finden und Ausgeben der Werte in den Stapeln erfordert, dass die oberen Einträge entfernt und gelöscht werden. Sie verlieren sich, wenn ich es richtig verstehe.
So oder so, es führte mich zu einem gewissen Lösung, die wie folgt beginnt:
void Hanoi(int nDisks, stack<int> source, stack<int> intermed, stack<int> dest){
if(nDisks == 1){
dest.push(source.top());
source.pop();
}
else{
Hanoi(nDisks - 1, source, dest, intermed);
dest.push(source.top());
source.pop();
Hanoi(nDisks - 1, dest, intermed, source);
}
}
int main()
{
int nDisks;
cout << "Enter the number of disks: ";
cin >> nDisks;
stack<int> source, intermed, dest;
for(int i = nDisks; i >= 1; i--){
source.push(i);
}
Hanoi(nDisks, source, intermed, dest);
return 0;
}
mir bewusst bin, dass dies falsch ist. Ich bin nicht sicher, wo ein guter Platz wäre, Quelle mit den Diskettenzahlen zu füllen. Und ich gebe jedes Mal den gleichen Quellstapel weiter. Wenn mir jemand eine Richtung geben könnte, wäre das wirklich cool. Vielen Dank.
wenn u TvH google, oder für diese Angelegenheit, wenn ich nur denken, werden Sie einfach nicht rekursive Methode (n) ;-) –
ich würde, aber ich finde Ich sollte die rekursive Methode verwenden. Ist das möglich? – d2jxp