使用函数的递归调用来解决Hanoi(汉诺)塔问题。

#include<stdio.h>

void hanoi(int n, char x, char y, char z);
void move(char x, char y);

int times = 0;	//表示移动圆盘的次数

void main()
{
	setvbuf(stdout, NULL, _IONBF, 0);    //使用eclipse开发环境时必须包含这个语句。不允许printf()函数输出到缓冲区,而是直接输出。
	
	int m;
	printf("input the number of disks:");
	scanf("%d", &m);
	printf("The step to moving %d diskes from A to C:\n", m);
	hanoi(m, 'A', 'B', 'C');	//将m个圆盘从A塔移动到C塔。
}

/* 
 * 将n个圆盘从x塔移动到z塔,y塔作为辅助塔
 */
void hanoi(int n, char x, char y, char z)
{
	if (n == 1)
		move(x, z);
	else
	{
		hanoi(n - 1, x, z, y);
		move(x, z);
		hanoi(n - 1, y, x, z);
	}
}

void move(char x, char y)
{
	printf("%d:\t%c-->%c\n",++times, x, y);
}
posted @ 2013-09-25 11:40  Andy Cheung  阅读(497)  评论(0编辑  收藏  举报