nowcoder
地上有乙個 m 行和 n 列的方格。乙個機械人從座標 (0, 0) 的格仔開始移動,每一次只能向左右上下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於 k 的格仔。
例如,當 k 為 18 時,機械人能夠進入方格 (35,37),因為 3+5+3+7=18。但是,它不能進入方格 (35,38),因為 3+5+3+8=19。請問該機械人能夠達到多少個格仔?
使用深度優先搜尋(depth first search,dfs)方法進行求解。回溯是深度優先搜尋的一種特例,它在一次搜尋過程中需要設定一些本次搜尋過程的區域性狀態,並在本次搜尋結束之後清除狀態。而普通的深度優先搜尋並不需要使用這些區域性狀態,雖然還是有可能設定一些全域性狀態。
private
static
final
int[
] next =,,
,};private
int cnt =0;
private
int rows;
private
int cols;
private
int threshold;
private
int[
] digitsum;
public
intmovingcount
(int threshold,
int rows,
int cols)
private
void
dfs(
boolean
marked,
int r,
int c)
private
void
initdigitsum()
}this
.digitsum =
newint
[rows]
[cols]
;for
(int i =
0; i <
this
.rows; i++
)for
(int j =
0; j <
this
.cols; j++
)this
.digitsum[i]
[j]= digitsumone[i]
+ digitsumone[j]
;}
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...