对于传统的汉诺塔游戏我们做一个拓展,我们有从大到小放置的n个圆盘,开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆盘都移到右边的柱子上,请实现一个函数打印最优移动轨迹。
给定一个int n,表示有n个圆盘。请返回一个string数组,其中的元素依次为每次移动的描述。描述格式为: move from [left/mid/right] to [left/mid/right]。
测试样例:
1
返回:move from left to right class Hanoi { public: vector<string> getSolution(int n) { hanoi(n,1,2,3);//1表示最开始圆盘所在的柱子,2表示最终圆盘所在的柱子,3表示辅助柱子 return ans; } } void hanoi(int n,int a,int b,int c){//hanoi(n,a,b,c)表示把n个盘子从柱子a借由柱子c搬到柱子b if(n>0){ hanoi(n-1,a,c,b);//首先把n-1个盘子从柱子a搬到柱子c move(a,b);//然后把第n个盘子从a移动到b hanoi(n-1,c,b,a);//最后把n-1个盘子从柱子c搬到柱子b } } void move(int x,int y){//根据移动的方向存储移动轨迹 if(x==1&&y==2)