ハノイの塔問題に関するいくつかの議論を読みました。次のコードを使用した再帰的なソリューションを理解しています。
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);
}
}
私が実際に行う必要があるのは、各ステップでタワーのある種の「イラスト」を出力することです。私はこれを達成するのに多くの問題を抱えています。インストラクターは、どのディスクがどのタワーにあるかを追跡するためにスタックを使用することを提案しましたが、スタック内の値を見つけて出力するには、一番上のエントリをポップして削除する必要があるため、これを出力するのに問題があります。私が正しく理解すれば、それらは失われます。
いずれにせよ、それは次のように始まるいくつかの解決策に私を導きました:
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;
}
これが間違っていることは十分承知しています。ソースにディスク番号を入力するのに適した場所がどこかわかりません。そして、毎回同じサイズのソース スタックを渡しています。誰かが私に何らかの方向性や何かを与えることができれば、それは本当に素晴らしいことです. ありがとうございました。