C语言 汉诺塔问题

一、汉诺塔

 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。由A,B,C三根柱子与n个圆盘组成,通过每次移动一个圆盘将A柱子上的圆盘移动到C柱子上。

当n=1时,移动方式:A->C

当n=2时,移动方式:A->B,A->C,B->C

当n=3时,移动方式:A->C,A->B,C->B,A->C,B->A,B->C,A->C

二、代码分析

1.用代码模拟移动,当圆盘从起始位置通过中转位置移动到结束位置,就是一轮汉诺塔游戏。定义move函数模拟圆盘的移动,设置参数起始位置a和结束位置c

void move(char a,char c)
{
     printf(" %c->%c ",a,c);
}

2.创建汉诺塔游戏函数,当圆盘数量为1时,起始位置就是A结束位置就是C。当圆盘数量大于1时,就需要中转位置B,将n-1个圆盘移到中转位置B,第n个圆盘通过移动函数只需从起始位置A到结束位置C,剩下的圆盘中n-1个圆盘起始位置是B中转位置则是A结束位置是C。

void Han(int n,char a,char b,char c)
{   if(n == 1)
    {
      move(a,c);
    }
    else
    {
      Han(n-1,a,c,b);
      move(a,b);
      Han(n-1,b,a,c);
    }
    
}

三、完整代码

#include <stdio.h>

void move(char a,char c)     
 {
 	printf(" %c->%c ",a,c);
 }

 void Han(int n,char a,char b,char c)
 {
 	if(n == 1)
	 {
 		move(a,c);
	 }
	else
	{
		Han(n-1,a,c,b);
		move(a,c);
		Han(n-1,b,a,c);
	} 
 }

 int main(){
 	int n;
 	printf("请输入盘子的个数:\n");
 	scanf("%d",&n);
 	printf("移动方式:\n");
 	Han(n,'A','B','C');
 	return 0;
 }

完整代码可直接使用,使用DEV软件无报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值