判断序列处于汉诺塔移动步数中哪一步

/*
题目描述

有一个int数组arr其中只含有一、2和3,分别表明全部圆盘目前的状态,1表明左柱,2表明中柱,3表明右柱,arr[i]的值表明第i+1个圆盘的位置。好比,arr=[3,3,2,1],表明第1个圆盘在右柱上、第2个圆盘在右柱上、第3个圆盘在中柱上、第4个圆盘在左柱上。若是arr表明的状态是最优移动轨迹过程当中出现的状态,返回arr这种状态是最优移动轨迹中的第几个状态。若是arr表明的状态不是最优移动轨迹过程当中出现的状态,则返回-1。
给定一个int数组arr及数组的大小n,含义如题所述,请返回一个int,表明所求的结果。
测试样例:
[3,3]
             [1]
            [ 2 ]
__________________       
[ 1 ] [ 2 ] [ 3 ]
返回:3
*/
class Hanoi {
public:
    int process(vector<int> arr,int i,int from,int mid ,int to)
{
	if(i == -1)
	{
		return 0;
	}

	if(arr[i] != from && arr[i] != to)
	{
		return -1;
	}
	else if(arr[i] == from)
	{
		return process(arr,i-1,from,to,mid);
	}
	else
	{
		int ret = process(arr,i-1,mid,from,to);
		if(ret == -1)
		{
			return -1;
		}
		return (1<<i)+ret;
    }
}


    
    int chkStep(vector<int> arr, int n) {
      
 	int left = 1;
	int mid  = 2;
	int right = 3;
	return process(arr,n-1,left,mid,right);
 
 
        
    }
}; 
/*
http://www.nowcoder.com/practice/b2d552cd60b7415fad2612a32e799812?tpId=49&tqId=29342&rp=4&ru=/ta/2016test&qru=/ta/2016test/question-ranking
*/
相关文章
相关标签/搜索