第13題 機械人的運動範圍

2022-08-23 14:24:10 字數 1605 閱讀 9518

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。 例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機械人能夠達到多少個格仔?

1.從(0,0)開始走,每成功走一步標記當前位置為true,然後從當前位置往四個方向探索,

返回1 + 4 個方向的探索值之和。

2.探索時,判斷當前節點是否可達的標準為:

1)當前節點在矩陣內;

2)當前節點未被訪問過;

3)當前節點滿足limit限制。

//1.計數函式int,引數:閾值int,矩陣行數int,矩陣列數int,返回值:計數int    

如果閾值為負,矩陣不存在,返回0        

分配訪問矩陣bool並初始化        

初始化計數為0      

從(0,0)開始計數

返回計數 

//2.搜尋函式int ,引數:閾值int,矩陣行數int,矩陣列數int,當前行數int,當前列數int,訪問矩陣陣列bool*,返回值:計數int

初始計數為0         

如果該位置滿足條件 

.1 更新訪問矩陣            

.2 從該位置的上下左右開始作為起點依次行遞迴呼叫,這裡是計數,所以用+,如果是找存在路徑就用或。 

返回計數 

//3.匹配函式bool,引數::閾值int,矩陣行數int,矩陣列數int,當前行數int,當前列數int,訪問矩陣陣列bool*,返回值:是否滿足條件 bool   

如果該位置滿足條件:1.不越界。2.不超過閾值。3.未曾訪問過。則返回真。

否則返回假。 

//4. 計算數字之和函式int,引數:數字int,返回值:數字之和int。

初始化數為之和為0             

迴圈         

.1 取餘,先加個位數            

.2 除以10,降一位 

返回sum 

class solution 

//2.搜尋函式int ,引數:閾值int,矩陣行數int,矩陣列數int,當前行數int,當前列數int,訪問矩陣陣列bool*,返回值:計數int

int movingcountcore(int threshold,int rows,int cols,int row,int col,bool* visited)

返回計數

return count;

}//3.匹配函式bool,引數::閾值int,矩陣行數int,矩陣列數int,當前行數int,當前列數int,訪問矩陣陣列bool*,返回值:是否滿足條件 bool

bool check(int threshold,int rows,int cols,int row,int col,bool* visited)

//4. 計算數字之和函式int,引數:數字int,返回值:數字之和int。

int getdigitsum(int num)

返回sum

return sum;

}};

13 機械人運動範圍

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...

13 機械人的運動範圍

有乙個m行n列的方格,乙個機械人從座標 0 0 的格仔開始移動,它每次可以向上下左右移動一格,但不能進入座標位數和大於threshold的格仔,求機械人一共能到達多少個格仔 機械人從 0,0 開始移動,當要移動到 i,j 時,先判斷i,j是否滿足條件,如果滿足,就進入,遞迴執行。如果不滿足,嘗試其他...

13機械人的運動範圍

地上有乙個 m 行和 n 列的方格。乙個機械人從座標 0,0 的格仔開始移動,每一次只能向左右上下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於 k 的格仔。例如,當 k 為 18 時,機械人能夠進入方格 35,37 因為 3 5 3 7 18。但是,它不能進入方格 35,38 因為 3...