一、題目描述:
給定乙個矩陣的行和列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。請...