C++によるハノイの塔の実装コード

以下のC++によるハノイの塔問題の実装コードを示します。

#include <iostream>

void hanoi(int n, char source, char auxiliary, char destination) {
    if (n == 1) {
        std::cout << "Move disk 1 from " << source << " to " << destination << std::endl;
        return;
    }
    
    hanoi(n - 1, source, destination, auxiliary);
    std::cout << "Move disk " << n << " from " << source << " to " << destination << std::endl;
    hanoi(n - 1, auxiliary, source, destination);
}

int main() {
    int numDisks;
    std::cout << "Enter the number of disks: ";
    std::cin >> numDisks;
    
    hanoi(numDisks, 'A', 'B', 'C');
    
    return 0;
}

ハノイの塔問題を再帰的に解くために、このコード例ではhanoi関数が使用されています。これは4つの引数を受け取ります: nは移動するディスクの数を表し、sourceはスタート柱、auxiliaryは補助柱、destinationはゴール柱を表します。nが1の場合、つまり移動するディスクが1つのみの場合は、直接ディスクをスタート柱からゴール柱に移動させます。そうでない場合は、n-1個のディスクをスタート柱から補助柱に移動させ、次にn番目のディスクをスタート柱からゴール柱に移動させ、最後にn-1個のディスクを補助柱からゴール柱に移動させます。

main関数では、ユーザーから移動させたい円の枚数の入力を受け、hanoi関数を実行して問題を解きます。

bannerAds