题目:汉诺塔问题

Posted okda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目:汉诺塔问题相关的知识,希望对你有一定的参考价值。

汉诺塔问题。有三根柱子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; }

 

以上是关于题目:汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章

面试高频题目--移动汉诺塔--递归与分治的运用

求解汉诺塔问题修改版

求解汉诺塔问题修改版

求解汉诺塔问题修改版

题目:汉诺塔问题

LQ0265 汉诺塔水题