文章

35

粉丝

0

获赞

192

访问

6.5k

头像
Hanoi塔问题 题解:
P1082 复旦大学机试题
发布于2026年2月1日 16:13
阅读数 201

#include <bits/stdc++.h>   //思路参考b站大佬NotOnlySuccess
using namespace std;
int cnt = 0;

void hanuota(int n, char from, char assist, char to)
{
	if(n == 1) { 
		cnt ++;
		cout << from << "-->" << to << "   ";
		if(cnt % 5 == 0) cout << '\n';
		return;
	}  //最小问题,当只有一个 圆环,将圆环直接从from放到to
	hanuota(n - 1, from, to, assist);  //子问题1,n个圆环,先把上面n-1个圆盘从from经过to放到assist
	cnt ++;
	cout << from << "-->" << to << "   "; //子问题2,把第n个圆环从from直接放到to
	if(cnt % 5 == 0) cout << '\n';
	hanuota(n - 1, assist, from, to);//子问题3,把n-1个圆环从assit经过from放到to
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0);
	int n;
	while(cin >> n)
	{
		if(n == 0) break;
		cnt = 0;
		char aa = 'A';
		char bb = 'B';
		char cc = 'C';
		hanuota(n, aa, bb, cc);
		cout << '\n';
	}
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发