汉诺塔问题路径打印

汉诺塔问题

问题

已知有三根柱子,在一根柱子上从下往上按照大小顺序摞着n片圆盘。把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

解决思路

把n个盘子看成最下面的一层和上面n-1层,n-1层移动到辅助柱子,最下面的盘子放在目标柱子,再以源柱子为辅助

过程

1.n-1个盘子从源柱子移动到辅助柱子,以目的柱子为辅助

2.把第n个盘子从源柱子移到目标柱子

3.n-1个盘子从辅助柱子移动到目标柱子,以源柱子为辅助


代码

#include<stdio.h>

#define N 5

void Hanoii(int n,char s,char a,char t);
//       盘子数目 源柱子 辅助柱子 目标柱子
void Hanoii(int n,char s,char a,char t){
	static int count;

	if(n > 0){
		Hanoii(n-1,s,t,a);//把n-1个盘子从源柱子移动到辅助柱子,以目的柱子为辅助
		printf("(%03d)%d:%c => %c\n",++count,n,s,t);//把第n个盘子从源柱子移到目标柱子
		Hanoii(n-1,a,s,t);//3.把n-1个盘子从辅助柱子移动到目的柱子,以源柱子为辅助
	}
}
void main(void){
	Hanoii(N,'A','B','C');	
}

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/yinjianxiang/article/details/54893135
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞