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]);*/ }