Hanoi问题

Hanoi

典型的递推问题,递推公式:T(n) = T(n-1) * 2 + 1,其中T(1) = 1。
分三步进行:

伪码

Hanoi(A,C,n)
if n == 1 then Move(A,C)
else Hanoi(A,B,n-1)
     Move(A,C)
     Hanoi(B,C,n-1)

奇怪的汉诺塔

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

int main(){
	int d[15],f[15];//d代表3柱,f代表4柱 
	
	d[1] = 1;
	for (int i = 2; i <= 12; i ++ )
		d[i] = d[i - 1]*2 + 1;
	
	memset(f,0x3f,sizeof f);
	f[0] = 0;
	
	for (int i = 1; i <= 12; i ++ )
		for (int j = 0; j < i; j ++ )
			f[i] = min(f[i],f[j] * 2 + d[i - j]);//移动前j个盘子后,剩下i-j个只能在3个柱子上移动 
	
	for (int i = 1; i <= 12; i ++ ) cout<<f[i]<<endl;
    return 0;
}


上一篇:一文带你详细介绍c++中的Move函数


下一篇:通过模拟JDK中的动态代理,由浅入深讲解动态代理思想.