系列文章目录
前言
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
描述
我们有由底至上为从大到小放置的 n 个圆盘,和三个柱子(分别为左/中/右即left/mid/right),开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆盘都移到右边的柱子上,要求一次只能移动一个圆盘,而且大的圆盘不可以放到小的上面。
请实现一个函数打印最优移动轨迹。
给定一个 int n
,表示有 n 个圆盘。请返回一个 string
数组,其中的元素依次为每次移动的描述。描述格式为: move from [left/mid/right] to [left/mid/right]
。
class Solution {
public:
vector<string> solution;
void Hanoi(int n, string left, string mid, string right){
if (n==0) return;
Hanoi(n-1,left,right,mid);//把n-1个盘子从left借助right搬到mid上去。
solution.push_back("move from " + left + " to " + right);//把第n个盘子从left搬到right上。
Hanoi(n-1,mid,left,right);//把n-1个盘子从mid借助left搬到right上去。
}
vector<string> getSolution(int n) {
Hanoi(n, "left", "mid", "right");
return solution;
}
};