ソードフィンガーオファー13.ロボットの可動域(C ++)DFS +バックトラッキング

座標[0,0]から座標[m-1、n-1]まで、地面にm行n列の正方形があります。ロボットは座標[0、0]のグリッドから移動を開始します。ロボットは、一度に1グリッドずつ左、右、上、下に移動でき(グリッドの外側には移動できません)、行座標の合計を入力できません。 k格子より大きい列座標。たとえば、kが18の場合、3 + 5 + 3 + 7 = 18であるため、ロボットは正方形[35、37]に入ることができます。しかし、3 + 5 + 3 + 8 = 19であるため、正方形[35、38]に入ることができません。ロボットはいくつのグリッドに到達できますか?

例1:

输入:m = 2, n = 3, k = 1
输出:3

例2:

输入:m = 3, n = 1, k = 0
输出:1

促す:

1 <= n、m <= 100
0 <= k <= 20

問題解決のアイデア:

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
到達可能なソリューションの構造と接続性に応じて、抽出しやすいロボットは、右下に移動するだけで、到達可能なすべてのソリューションにアクセスできます。

三角形の内側:すべて接続されている、証明しやすい;
2つの三角形の接続された場所:三角形の解が到達可能である場合、それは左側または上の三角形と接続されている(つまり交差している)必要があります。つまり、ロボットは左または上から三角形に入ることができます。

ここに画像の説明を挿入します

DFSアイデアの深さ優先探索

ここに画像の説明を挿入します
Java / C ++コードでアクセスされるのは補助マトリックスであり、PythonではSetです。

class Solution {
    
    
public:
    int movingCount(int m, int n, int k) {
    
    
        vector<vector<bool>> visited(m, vector<bool>(n, 0));//标记当前单元格,走过表示ture
        return dfs(0, 0, 0, 0, visited, m, n, k);
    }
private:
    int dfs(int i, int j, int si, int sj, vector<vector<bool>> &visited, int m, int n, int k) {
    
    
        if(i >= m || j >= n || k < si + sj || visited[i][j]) return 0;//终止条件:
        // 当 ① 行列索引越界 或 ② 数位和超出目标值 k 或 ③ 当前元素已访问过 时,返回 0 ,代表不计入可达解。
        visited[i][j] = true;
        //计算当前元素的 下、右 两个方向元素的数位和,(i + 1, j)在(i , j)下方
        //i + 1, j, (i + 1) % 10 != 0 ? si + 1 : si - 8, sj,的原因,行列索引 i加1了,而 j不变,因此继续用sj
        // i, j + 1, si, (j + 1) % 10 != 0 ? sj + 1 : sj - 8  同理可得
        return 1 + dfs(i + 1, j, (i + 1) % 10 != 0 ? si + 1 : si - 8, sj, visited, m, n, k) +
                   dfs(i, j + 1, si, (j + 1) % 10 != 0 ? sj + 1 : sj - 8, visited, m, n, k);
    }
};

複雑さの分析:

行列の行数と列数をそれぞれMとNとします。

時間計算量O(MN):最悪の場合、ロボットはマトリックスのすべてのセルをトラバースします。このとき、時間計算量はO(MN)です。
スペースの複雑さO(MN):最悪の場合、マトリックスのすべてのセルのインデックスは、O(MN)の余分なスペースを使用して、訪問したセットに格納されます。

ここに画像の説明を挿入します

著者:jyd
リンク:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/solution/mian-shi-ti-13-ji-qi-ren -de-yun-dong-fan-wei-dfs-b /
出典:LeetCode(LeetCode)
著作権は作者に帰属します。商用の転載の場合は、著者に連絡して許可を求め、非商用の転載の場合は、出典を示してください。

おすすめ

転載: blog.csdn.net/qq_30457077/article/details/114984660