其实深度优先搜索就是一种动态规划
下面让我们来模拟一下汉诺塔的写法
动态规划怎么规划呢,其实找到几个点就可以
第一个就是最容易想到的转移条件,汉诺塔的思想是什么呢?
比如给你2个物块,那么你的任务就是把第一个物块移动到第二根柱子,再把第二个物块移动到第三个柱子,最后再把第二根柱子的物块移动到第三根柱子。
那么你就可以去想想,如果给你n个物块呢?
你的任务就是把n-1个物块移动到第二根柱子,再把最底层的物块移动到第三根柱子,最后再把n-1个物块移动到第三根柱子,那么这样子移动就已经结束了。
第一次移动就是hanoi(int A, int B, int C,int n); 其中n代表移动的柱子数,ABC依次表示123三根柱子,这一步表示将A上面的n-1个物块移动到C,那么下一步是什么呢?
我们需要分解一下问题,如果要把它全部移动到C,那么应该首先将上面那些n-1移动到B,然后再将最底部的物块从A移动到C,然后再将n-1个物块从B移动到C。因此核心代码应该这样写:
hanoi(A, C, B, n-1);
move(A, C);
hanoi(B, A, C, n-1);
move函数表示实际操作将A的一个物块移动到C
然后就是边界条件了!!!马上就写好!!!
如果我们发现移动到最后一个物块应该怎么处理呢?
那就把它从A的位置移动到C的位置其他的不用去管!!!(这里的A与C其实是传入的参数,也有可能不是
最低0.47元/天 解锁文章
2080

被折叠的 条评论
为什么被折叠?



