hanoi塔

3 篇文章 0 订阅
1 篇文章 0 订阅

hanoi塔问题:

1.规则:一次移动一个盘子,小盘子压大盘子上面,有A、B、C三个柱子,A是起始放盘子的柱子,B是中间可以借助的柱子,C是最后放盘子的位置

2.简单思路:
如果有1个盘子,就是将这一个盘子直接从A->C

--> 

如果有两个盘子,就是将上面的小盘子先放在B上面,再将下面的大盘子放在C上面,最后再将放在B上面的小盘子放到C上面

--->--->

--->
如果有n个盘子,就是将上面的n-1个小盘子放在B上面,再将下面的大盘子放在C上面,最后再将放在B上面的n-1个小盘子放到C上面

--->--->

--->

3.代码:

总结就是三步走:

第一步:

hanoi(n-1,A,C,B)//先将n-1个小盘子从A挪到到B,借助于C

第二步:

printf("%c->%c",A,C)//将最下面的大盘子直接挪到C上面,此时可以打印出来

第三步:

hanoi(n-1,B,A,C);//再将在B上面的n-1个小盘子挪到C上面借助于A

完整代码:(不要忘记递归的结束条件哦)

id hanoi(int n,char A,char B,char C) {
	if (n==0) {
	}
	else {
		hanoi(n - 1, A, C, B);
		printf("%c->%c ",A,C);
		hanoi(n - 1, B, A, C);
	}
}

int main() {
	hanoi(3,'A', 'B', 'C');
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值