首页 > 其他 > 详细

计蒜客 - 汉诺塔

时间:2019-05-01 16:51:01      阅读:218      评论:0      收藏:0      [点我收藏+]

问题:

技术分享图片

思路:

汉诺塔问题非常经典,不懂推荐去看B站正月点灯笼老师的对于汉诺塔的讲解: 「递归练习」汉诺塔,非常生动.

不过这道题单靠传统汉诺塔解法会超时,仔细思考发现,其实没有必要同时搜索hanoi(n - 1, A, C, B)和hanoi(n - 1, B, A, C).

只需调用一次hanoi(n - 1)就可通过计算确定一次操作的移动次数和消耗体力. 使用结构体记录状态. 代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 typedef long long ll;
 4 
 5 struct node {
 6     ll cost;
 7     ll step;
 8 };
 9 node hanoi(int n)
10 {
11     node np;
12     if (n == 1) {
13         np.step = 1;
14         np.cost = 1;
15     }
16     else {
17         node tmp = hanoi(n - 1);
18         np.step = tmp.step * 2 + 1;
19         np.cost = tmp.cost * 2 + n;
20     }
21     return np;
22 }
23 
24 int main()
25 {
26     int n;
27     cin >> n;
28     node x = hanoi(n);
29     cout << x.step <<   << x.cost << endl; 
30     return 0;
31 }

计蒜客 - 汉诺塔

原文:https://www.cnblogs.com/AntonLiu/p/10800033.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!