汉诺塔

 

 

 

1.求n个圆盘的汉诺塔的步骤

void Hanoi(int n,char a,char b,char c){
	if(n==1)printf("Step %d Plate %d: %c-->%c\n",++step,n,a,c);
	else{
		Hanoi(n-1,a,c,b);
		printf("Step %d Plate %d: %c-->%c\n",++step,n,a,c);
		Hanoi(n-1,b,a,c);
	}
}

  

 

2.求n个圆盘的三柱汉诺塔的最小步骤数

cin>>n;
cout<<(long long)pow(2,n)-1;

  

3.格雷码与汉诺塔之间的关系

while(x>=1){
	if(Gray[x]!=Gray1[x]){
		cout<<x;
		break;
	}
	x--;
}

  

4.Hanoi双塔问题最小步骤数(高精度)

for(int i=1;i<=n;i++){
	for(int j=0;j<l;j++){
		a[j]*=2;
	}
	k=0;
	l++;
	while(k<l){
		a[k]+=a[k-1]/10;
		a[k-1]%=10;
		k++;
	}
}

  

5.Hanoi四柱问题最小步骤数

for(int i=4;i<=12;i++){
	for(int j=1;j<i;j++){
		f[i]=min(f[i],f[j]*2+d[i-j]);
	}
}

  

6.求n个圆盘的三柱汉诺塔的最小步骤数(只能移动到相邻的柱子上)

for(int i=1;i<=n;i++){
    for(int j=0;j<l;j++){
        a[j]*=3;
    }
    k=0;
    l++;
    while(k<l){
        a[k]+=a[k-1]/10;
        a[k-1]%=10;
        k++;
    }
}
a[0]-=1;

  

posted @ 2023-02-28 20:00  天雷小兔  阅读(72)  评论(0)    收藏  举报