zoukankan      html  css  js  c++  java
  • 汉诺塔

    #include<iostream>
    #include<stack>
    #include<stdlib.h>
    
    using namespace std;
    int count = 0;
    void move(int n,stack<int>&a,stack<int>&b,stack<int>&c){
        if(n==0){
            return;
        }
        move(n-1,a,c,b);
        c.push(a.top());
        a.pop();
        count++;
        move(n-1,b,a,c);
    
    }
    
    void print_stack(stack<int>a){
      while(!a.empty()){
        cout<<a.top()<<endl;
        a.pop();
      }
    }
    
    
    
    int main(int argc,char*argv[]){
        int n = 3;
        if(argc>1){
          n = atoi(argv[1]);
        }
        stack<int>a;
        stack<int>b;
        stack<int>c;
        for(int i=n;i>0;i--){
            a.push(i);
        }
        print_stack(a);
        move(n,a,b,c);
        print_stack(c);
        
        cout<<count<<endl;
    }
    def move(n,a,b,c):
        if n ==1:
            print(a,'-->' ,c)
        else: 
            move(n-1,a,c,b)
            move(1,a,b,c)
            move(n-1,b,a,c)
    move(3,'a','b','c')    

    汉诺塔是印度一个古老传说的益智玩具。汉诺塔的移动也可以看做是递归函数。

    我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:
    如果a只有一个圆盘,可以直接移动到c;
    如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。
    请编写一个函数,给定输入 n, a, b, c,打印出移动的步骤:
    move(n, a, b, c)
    例如,输入 move(2, ‘A’, ‘B’, ‘C’),打印出:
    A –> B
    A –> C
    B –> C

    https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295?fr=aladdin

  • 相关阅读:
    VMware 8安装Mac OS X 10.7 Lion正式版
    linq to sql sum
    拍照,去相册剪切图片
    Binding for WPF Styles
    JDK1.8简单配置环境变量两步曲
    hibernate系列之四
    idea中使用逆向工程三部曲
    hibernate系列之一
    hibernate系列之二
    《JSON笔记之二》封装JSONUtil
  • 原文地址:https://www.cnblogs.com/yuguangyuan/p/10152303.html
Copyright © 2011-2022 走看看