奇怪的漢諾塔
時間限制:C/C++ 1000MS,其他語言 2000MS
記憶體限制:C/C++ 256MB,其他語言 512MB描述
漢諾塔問題,條件如下:
- 這裡有 \(A\)、\(B\)、\(C\) 和 \(D\) 四座塔。
- 這裡有 \(n\) 個圓盤,\(n\) 的數量是恆定的。
- 每個圓盤的尺寸都不相同。
- 所有的圓盤在開始時都堆疊在塔 \(A\) 上,且圓盤尺寸從塔頂到塔底逐漸增大。
- 我們需要將所有的圓盤都從塔 \(A\) 轉移到塔 \(D\) 上。
- 每次可以移動一個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓盤時,可將圓盤移至這座塔上。
請你求出將所有圓盤從塔 \(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;
}