13 機械人的運動範圍

2021-10-08 05:38:17 字數 1188 閱讀 4219

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...