13 機械人的運動範圍

2021-10-20 18:22:11 字數 2856 閱讀 1772

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

示例 1:

輸入:m = 2, n = 3, k = 1

輸出:3

示例 2:

輸入:m = 3, n = 1, k = 0

輸出:1

1 <= n,m <= 1000 <= k <= 20深度優先遍歷(dfs),通過判斷該座標是否越界、該座標是否訪問過、該座標數字之和是否大於k來判斷機械人能否進入該格仔,不管能否進入,都將該格仔標記為已訪問,且退出當前呼叫棧後,不用回退標記陣列的狀態,因為本身就是要訪問完所有能夠訪問到的格仔。如果機械人能夠進入座標為(x,y)的格仔,而後再判斷機械人能否進入該座標相鄰的4個格仔,直到所有能遍歷到的格仔都遍歷結束。

注意:有些格仔機械人是遍歷不到的,如k=0時, 不管m,n多大,機械人只能訪問到(0,0),(0,1),(1,0)三個座標,且只能到達(0,0)乙個座標,無法通過訪問到的(0,1)(1,0)擴散出去訪問別的座標,因為這兩個座標機械人無法到達,只是可以通過(0,0)訪問到他們一次而已,即這裡要區分訪問到達是不同的含義。

如下圖中3×2的方格,機械人從(0,0)開始移動,由於k=0,故訪問了(0,1)後,數字之和大於0,回溯到上一級棧(0,0)處,繼續換個方向移動,訪問(1,0)後發現同樣數字之和大於0,又回溯到(0,0)處,此時發現沒有方向可以移動了,整個dfs結束。另外的三個座標(1,1)、(2,0)(2,1)根本就沒有訪問過。

但若讓k=2,則按照上述思路思考,機械人可以訪問到所有格仔,只是(2,1)無法到達而已,但可以通過(1,1)或者(2,0)訪問到,只是由於(2,1)數字之和為3大於2,機械人無法到達

}//計算行座標和列座標的數字之和

}//計算行座標和列座標的數字之和

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