66 機械人的運動範圍

2021-10-24 13:13:22 字數 1271 閱讀 5196

一、題目描述:

給定乙個矩陣的行和列row,col,以及閾值sho,從起點(0,0)出發,每次可以往上、下、左、右四個方向走,並且走到(i,j)時,i和j的每位數之和需要小於等於sho,問最多可以走多少格仔。

二、官方題解(dfs解法):

我們假設乙個5x5矩陣,閾值sho=3,如果我們用dfs的話,就相當於「不撞南牆不回頭」,我在下面畫了乙個圖,

最開始,我們在(0,0)的位置,我們假設按照的方向去試探。所以我們走的順序應該是按照圖中的下標走的。

當走到4的時候,發現不能繼續往右邊走,並且4個方向都走不通了,那就回溯到3,發現可以走到5,接著就站在5的視角,發現可以走6,就一直按照這個想法。

遞迴函式模板為:

dfs()  

int main()

按照模板改寫**:

#include#include#include#include#includeusing namespace std;

class solution ;//控制機械人運動方向的權值

int check(int n)

return sum;

} void dfs(int x, int y, int sho, int r, int c, int &ret, vv &mark)

// 檢查當前座標是否滿足條件

if (check(x) + check(y) > sho)

// **走到這裡,說明當前座標符合條件

mark[x][y] = 1;

ret += 1;

for (int i = 0; i < 4; ++i)

} int movingcount(int sho, int rows, int cols)

vv mark(rows, v(cols, -1));

/*//向螢幕輸出mark元素

for (int i = 0; i < rows; i++)

cout << endl;

}*/int ret = 0;

dfs(0, 0, sho, rows, cols, ret, mark);

return ret;

}};int main()

**中關於vector和vector>的高階用法

66 機械人的運動範圍

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

66 機械人的運動範圍

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

66 機械人的運動範圍

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