奇怪的漢諾塔 - 題解

Jerrycyx發表於2024-07-29

奇怪的漢諾塔

時間限制: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;
}

相關文章