您的位置:首页 > 其它

3】Hanoi汉诺塔问题

2016-05-17 11:16 246 查看
有N个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外的柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱子上无盘子),但绝不允许发生柱子上出现大盘子在上,小盘子在下的情况,现要求设计将A柱子上N个盘子搬移到C柱去的方法。


①如果N=0,则退出,即结束程序;否则继续往下执行;

②用C柱作为协助过渡,将A柱上的(N-1)片移到B柱上,调用过程mov(n-1, a,b,c);

③将A柱上剩下的一片直接移到C柱上;

④用A柱作为协助过渡,将B柱上的(N-1)移到C柱上,调用过程mov (n-1,b,c,a)。

【参考程序】  

#include<iostream>
   using namespace std;
   int k=0,n;
   void mov(int n,char a,char c,char b)
//用b柱作为协助过渡,将a柱上的(n)移到c柱上
   {
    if (n==0) return; //如果n=0,则退出,即结束程序
    mov(n-1,a,b,c ); //用c柱作为协助过渡,将a柱上的(n-1)片移到b柱上
    k++;
    cout <<k<<" :from "<<a <<"-->"<<c<<endl;
    mov(n-1,b,c,a );  //用a柱作为协助过渡,将b柱上的(n-1)移到c柱上
   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: