C语言实现汉诺塔问题

C语言中的汉诺塔问题解析

一:c语言中的汉诺塔问题含义

有三根柱子,现有若干圆盘,需要将所有圆盘从第一根移动到第三根柱子上,且每一次的移动都要保证下面的圆盘比上面的圆盘大,写出具体移动过程。

具体可参考链接汉诺塔游戏 (gitee.io)[]

二:如何去理解c语言中的汉诺塔问题

首先,玩三次游戏,分别是1层,两层,三层,以便理解。

玩过三次游戏后我们会发现,每一次游戏,n个盘子,我们的目的都是先将a柱上的n-1个盘子移动到b柱(中转柱),后将a柱(起始柱)最下面的第n个盘子移到c柱(目标柱)。而第二轮的时候,b柱又会变成起始柱,a柱会变成中转柱,依次循环往复,最终达到目的。我们来看具体代码实现。C语言实现汉诺塔问题_第1张图片

代码块

#include 

void move(char pos1, char pos3)//把盘子从起始柱移到目标柱
{
	printf(%c->%c  ",pos1 , pos3);
}

//pos1代表起始柱
//pos2代表中转柱 
//pos3代表目标柱
void Hanoi(int n, char pos1, char pos2, char pos3)//把n个盘子从起始柱借助中转柱移到目标柱
{
	if (n == 1)//递归限制条件,A柱上最后一个盘子从A柱移动到C柱
	{
		move(A, C);
	}
	else
	{
		Hanoi(n - 1, A, C, B);//把A柱上n-1个盘子借助C柱移到B柱
		move(A, C);			  //A柱上n-1个盘子移到B上之后将A柱上第n个盘子移到C柱
		Hanoi(n - 1, B, A, C);//将B柱上n-1个盘子借助A柱移到C柱
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	Hanoi(n,'A','B','C');
	return 0;
}

代码块的实现逻辑就是:先创建变量,知晓起始柱有几个盘子,而后传入变量给汉诺塔具体实现函数。

只有一个盘子时,只需要将盘子直接移动到目标柱就好,所以move(A,C);

大于一个盘子时,进入Hanoi函数中的else语句,一直递归直到a柱只剩最大的盘子,进入if语句执行move(A,C)再跳出Hanoi函数,接着进行Hanoi中else语句中的move(A,C)…依此逻辑执行得到结果。

你可能感兴趣的:(C语言,c语言,c++)