算法设计与分析——分治与递归策略——hanoi问题
生活随笔
收集整理的這篇文章主要介紹了
算法设计与分析——分治与递归策略——hanoi问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
**漢諾塔問題:**古代有一個梵塔,塔內有三個座A、B、C,A座上有64個盤子,盤子大小不等,大的在下,小的在上(如圖)。有一個和尚想把這64個盤子從A座移到B座,但每次只能允許移動一個盤子,并且在移動過程中,3個座上的盤子始終保持大盤在下,小盤在上。我們的移動盤子的步驟為:
? 如果只有 1 個盤子,則不需要利用C塔,直接將盤子從A移動到B。
? 如果有 2 個盤子,可以先將盤子2上的盤子1移動到C;將盤子2移動到B;將盤子1移動到B。這說明了:可以借助C將2個盤子從A移動到B。
以此類推,上述的思路可以一直擴展到 n 個盤子的情況,將將較小的 n-1個盤子看做一個整體,也就是我們要求的子問題,以借助B塔為例,可以借助空塔B將盤子A上面的 n-1 個盤子從A移動到B;將A最大的盤子移動到C,A變成空塔;借助空塔A,將B塔上的 n-2 個盤子移動到A,將B最大的盤子移動到C,B變成空塔…
#include<bits/stdc++.h> using namespace std; int i = 1; void move(char x,char y) {cout << "第"<<setw(4)<<i++<<"步,將盤子從" << x << "移動到" << y << endl; }void hanoi(int n,char a,char b,char c) {if(n>0){hanoi(n - 1, a, c, b);move(a, b);hanoi(n - 1, c, b, a);}} int main() {int n;cout<<"請輸入要進行hanoi問題的層數:"<<endl;cin>>n;hanoi(n, 'a', 'b', 'c');system("pause");return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的算法设计与分析——分治与递归策略——hanoi问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 得了结石怎么办
- 下一篇: 中药减肥最有效配方有什么