劍指offer 013 機械人運動的範圍

2021-08-14 23:44:50 字數 1227 閱讀 2565

《劍指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...