Algorithm Hanoi汉诺塔

Reference

「递归练习」汉诺塔_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

其实汉诺塔老早就写过了,不论是学Python还是C时,老师都讲过。
汉诺塔也是我头一次体会到Python的效率真的被C甩好几条街……
实现的重点就在于,不要去管上层的盘子怎么移动,只去关心最底层盘子的移动和计数。
用了全局变量cnt来计数,src、mid、dst分别表示源盘子,辅助盘子和目标盘子。
接口:
void hanoi(盘子数量,源柱子字符,辅助柱子字符,目标柱子字符)

#include <stdio.h>
int cnt=0;
void hanoi(int n,char src,char mid,char dst)
{
	if(n==1)
	{
		cnt++;
		printf("Moved Plate 1 from %c to %c\n",src,dst);//只有一块时直接移动
	}
	else
	{
		hanoi(n-1,src,dst,mid);//不要去关心怎么从左边经由右边移n-1个到中间,只要调用就行
		
		printf("Moved Plate %d from %c to %c\n",n,src,dst);
		cnt++;//这一步操作真正想要移动的只有最底下的盘子,计数也只计数这个
		
		hanoi(n-1,mid,src,dst);//同样不要去关心怎么从中间经由左边移n-1个到右边,只要调用就行
	}
}

int main(int argc, char const *argv[])
{
	hanoi(10,'A','B','C');
	printf("%d\n",cnt);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43873801/article/details/87003984