c++汉诺塔实现源码(较清晰)

c++汉诺塔实现源码(较清晰)



#include <iostream>
#define N 5 //层数
//使用template<class T>的目的是将所有arr同一为一个
//只需知道所有arr都是同一个arr,改形参就改实参

//交换两个数 改形参就改实参
void swop(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}

//输出arr内容
template<class T>
void print(T &arr) {

    for (auto& i : arr)
    {
        for (auto& j : i)
            std::cout << j << "\t";
        std::cout << "\n";
    }
    std::cout << "\n";
}
//开始
//zs表示深度(未启用),n表示当前层数,arr 目标数组
//A表示起始柱,B表示目标柱,(3-A-B)表示中间柱
template<class T>
void into(int zs ,int n ,T &arr,int A,int B) {
    
    if (n == 1)
    {
        swop(arr[n-1][A], arr[n - 1][B]);    print(arr);
        return;
    }
    else
    {
        into(zs ,n - 1, arr,A,3-A-B);
        swop(arr[n-1][A], arr[n-1][B]);    print(arr);
        into(zs, n - 1, arr, 3- A - B, B);
    }


    




}

int main(){

    std::cout << "Hello World!\n";
    int arr[N][3]{0};
    for (int i = 0; i != N; i++)
    {
        arr[i][0] = i + 1;

    }
    for (auto& i : arr)
    {
        for (auto& j : i)
            std::cout << j << "\t";
        std::cout << "\n";
    }

    std::cout << "\n";
    into(N,N, arr,0,2);
    /*
    swop(arr[0][0], arr[3][1]);    
    swop(arr[1][0], arr[3][2]);    
    swop(arr[3][1], arr[2][2]);*/





}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值