数据结构学习之_汉诺塔递归算法

/*
	2013年3月25日 22:59:36 xulei
	汉诺塔: 设有n个盘子, 源柱子: A  中间柱子: B   目标柱子: C
		1. 先把A柱子上的前n-1个盘子从A借助C 移动到B; (移完后, A上只剩下最下面的那一个盘子了, 上面的n-1个已经移到了B上)
		2. 将A上的第n 个盘子直接移动到C 上. 盘子减少一个
		3. 再将B柱子上的n-1个盘子借助于A 移到C.
		4. 将B柱子上的第n上盘子直接移动到C上.
		重复1-4, 直到盘子为1个时结束.
*/

#include <stdio.h>

long step = 0;
int move(int n, char A, char C)  
{
	step ++;
	printf("step %ld:  将第%d个盘子从%c -> %c\n", step, n, A, C);
	return 0;
}  

int TowersOfHanoi(int n, char A, char B, char C)  
{ 	
	if (n > 0)  
	{  
		TowersOfHanoi(n-1, A, C, B);  // 刚开始, 盘子在A上, A借助C把上面n-1个盘子移动到B
		move(n,A,C);  
		TowersOfHanoi(n-1, B, A, C);  // B 借助A 移动到C
	} 
	return 0;
}

int main(int argc, char **argv)
{
	int n;
	printf("How many disks: ");
	scanf("%d", &n);
	TowersOfHanoi(n, 'A', 'B', 'C');

	return 0;
}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/xulei364132789/article/details/8719662
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞