判斷序列處於漢諾塔移動步數中哪一步

/*
題目描述

有一個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
*/
相關文章
相關標籤/搜索