《劍指offer》目錄索引
問題描述:
地上有乙個m行n列的方格。乙個機械人從座標(0, 0)的格仔開始移動,它每一次可以向左、右、上、下移動一格,但不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格(35, 37),因為3+5+3+7=18。但它不能進入方格(35, 38),因為3+5+3+8=19。請問該機械人能夠到達多少個格仔?問題分析:
所走格仔的範圍條件:思路:1)必須在方格範圍內
2)行座標各位之和+列座標各位之和 > = k
解決此問題可通過求解三個子問題來求解:**:1)機械人遍歷的格仔範圍:可通過回溯法進行》探測,如果座標合法,則遍歷其周圍上下左右四個方向,周圍合法的座標即為可以走的格仔
2)座標是否滿足條件:行座標(或列座標)可以是1位數,2位數,3位數…..,求座標之和可將其拆分為:個位數+十位數+百位數+….
3)統計所走的格仔數:機械人遍歷合法座標的格仔數即為機械人到達的格仔數
int getdigitadd(int x)
return tmp;
}int rootmovecount(int rows,int cols,int k)
int i=0;
while(i0;
++i;
}//統計所走格仔數
count=rootmove(0,0,rows,cols,k,path);
free(path);
path=null;
return count;
}int rootmove(int row,int col,int rows,int cols,int k,int* path)
if((getdigitadd(row)+getdigitadd(col))<=k&&path[row*cols+col]==0)
else
}void test()
結果: 劍指offer 機械人運動範圍
題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...
劍指offer 機械人的運動範圍
地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...
劍指offer 機械人的運動範圍
題目描述 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8...