汉诺塔 Hanoi

/**********************************
 *                                *
 * 文件夹: ▲03 栈和队列\06 Hanoi *
 *                                *
 * 文件名: Hanoi.h                *
 *                                *
 * 内  容: 汉诺塔相关操作列表     *
 *                                *
 **********************************/

#ifndef HANOI_H
#define HANOI_H

#include <stdio.h> 

/* 全局变量 */ 
int gStep;								//统计移动步数 

/* 汉诺塔函数列表 */
void hanoi(int n, char x, char y, char z); 
/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃(1)算法3.5:汉诺塔求解。以y为辅助,将x上前n个圆盘移动到z。┃             
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/

void move(char x, int n, char z);
/*━━━━━━━━━━━━┓
┃(2)将第n个圆盘从x移到z。┃
┗━━━━━━━━━━━━*/

#endif
/**********************************
 *                                *
 * 文件夹: ▲03 栈和队列\06 Hanoi *
 *                                *
 * 文件名: Hanoi.c                *
 *                                *
 * 算  法: 3.5                    * 
 *                                *
 **********************************/

#ifndef HANOI_C
#define HANOI_C

#include "Hanoi.h"						//**03 栈和队列**//

/*════╗
║ 算法3.5║ 
╚════*/
void hanoi(int n, char x, char y, char z)
{
	if(n==1)							//欲移动n个圆盘,需先移动其上的n-1个圆盘 
		move(x, 1, z);					//将编号为1的圆盘从x移到z 
	else
	{
		hanoi(n-1, x, z, y);			//将x上编号为1至n-1的圆盘移到y,z作辅助塔 
		move(x, n, z);					//将编号为n的圆盘从x移到z 
		hanoi(n-1, y, x, z);			//将y上编号为1至n-1的圆盘移动到z,x作辅助塔 
	}	
} 

void move(char x, int n, char z)
{
	gStep++;							//step为全局变量,在main函数之外定义 
	printf("第%2d步:将第 %d 个圆盘从 %c 移到 %c \n", gStep, n, x, z); 
} 

#endif
/**********************************
 *                                *
 * 文件夹: ▲03 栈和队列\06 Hanoi *
 *                                *
 * 内  容: 汉诺塔相关函数测试     *
 *                               *
 **********************************/

#include "Hanoi.c"						//**03 栈和队列**//	
			
int main(int argc, char **argv)
{
	int n;
	char x = 'x';
	char y = 'y';
	char z = 'z';
	
	n = 3;								//为控制时间,n不要超过10 
	
	printf("作为示例,假设圆盘个数为 %d ,操作步骤如下...\n", n);

	hanoi(n,x,y,z);
	
	printf("\n");
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/87825561