题目:汉诺塔问题

汉诺塔问题。有三根柱子A、B、C。设A柱上有n个盘子,盘子的大小不等,大的盘子在下,小的盘子在上,如下图所示。要求将A柱上的n个盘子移到C上,每一次只能移一个盘子。在移动过程中,可以借助于任一根柱子,但必须保证三根柱子上的盘子都是大的盘子在下,小的盘子在上。要求编一个程序打印出移动盘子的步骤。

#include<iostream>
using namespace std;

void move(char x,char y){
    cout<<x<<"->"<<y<<endl;
}
void hanoi(int n,char A,char B,char C){
    if(n == 1) move(A,C);
    else{
        hanoi(n-1,A,C,B);//以C为平台,把A上面n-1个搬到B 
        move(A,C);//再把A最上一个(从底下数第n(指函数里的n)个)放以在C柱上 
        hanoi(n-1,B,A,C);// 以A为平台,把B上那n-1个搬到C 
    } 
/*不要想太复杂,这里的ABC在传来传去中,指代确实有改变,
但从第n个盘的移动考虑就可,把上面n-1做整体
*/ } int main(){ int num; cout<<"请输入A柱盘数:"; cin>>num; hanoi(num,'A','B','C') ; return 0; }

 

posted @ 2020-03-15 11:12  //Mendax  阅读(273)  评论(0编辑  收藏  举报