问题:将求解汉若塔的每步移动输出。
思路:将问题归纳为只有两层时的通用情况,当只有两层时,第一步先将第一层移动到中间,第二部将第二层移动到右边,第三步将第一层从中间移动到右边。再将问题细分为求解第一层。
代码:
#include <iostream>
using namespace std;
int steps;
void dfs(int n, string l, string m, string r)
{
if(n == 0) return;
//现将n-1层移动到中间
dfs(n-1, l, r, m);
//再将n层移动到右边
cout << "the " << ++steps << " steps: " << "move from " << l << " to " << r << endl;
//最后将中间层移动到右边
dfs(n-1, m, l, r);
}
int main()
{
int n;
while(cin >> n){
steps = 0;
dfs(n, "left", "mid", "right");
}
return 0;
}