奇怪的汉诺塔 - 题解

奇怪的汉诺塔

时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB

描述

汉诺塔问题,条件如下:

  1. 这里有 \(A\)\(B\)\(C\)\(D\) 四座塔。
  2. 这里有 \(n\) 个圆盘,\(n\) 的数量是恒定的。
  3. 每个圆盘的尺寸都不相同。
  4. 所有的圆盘在开始时都堆叠在塔 \(A\) 上,且圆盘尺寸从塔顶到塔底逐渐增大。
  5. 我们需要将所有的圆盘都从塔 \(A\) 转移到塔 \(D\) 上。
  6. 每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。

请你求出将所有圆盘从塔 \(A\) 移动到塔 \(D\),所需的最小移动次数是多少。

输入描述

没有输入

输出描述

对于每一个整数 \(n\),输出一个满足条件的最小移动次数,每个结果占一行。

提示

\(1≤n≤12\)

代码

#include<cstdio>
#include<algorithm>
using namespace std;

int DFS(int x)
{
	if(x==1) return 1;
	int res=0x7fffffff;
	for(int i=1;i<x;i++)
	{
		int t=0;
		t+=DFS(i);
		t+=(1<<(x-i))-1;
		t+=DFS(i);
		res=min(res,t);
	}
	return res;
}

int main()
{
	for(int i=1;i<=12;i++)
		printf("%d\n",DFS(i));
	return 0;
}
posted @ 2024-07-29 23:44  Jerrycyx  阅读(8)  评论(0编辑  收藏  举报