lcインタビューの質問13.ロボットの可動範囲

lcインタビューの質問13.ロボットの可動範囲

座標[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]に入ることができません。ロボットが到達できるグリッドはいくつですか?

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

解決方法:BFS。BFSはトラバーサルですが、幅優先アプローチを使用します。この問題は、深度優先で解決することもできます。この質問は、手動で問題を解決するプロセスに似ています。[0,0]から始めて、保存できます。スキップすることはできません。

class Solution {
    public int movingCount(int m, int n, int k) {
        boolean[][] visited = new boolean[m][n];
        int res = 0;
        Queue<int[]> queue= new LinkedList<int[]>();
        queue.add(new int[] { 0, 0, 0, 0 });
        while(queue.size() > 0) {
            int[] x = queue.poll();
            int i = x[0], j = x[1], si = x[2], sj = x[3];
            if(i < 0 || i >= m || j < 0 || j >= n || k < si + sj || visited[i][j]) continue;//不可以走,跳过,不进行遍历。
            visited[i][j] = true;
            res ++;
            queue.add(new int[] { i + 1, j, (i + 1) % 10 != 0 ? si + 1 : si - 8, sj });//右边一个位置
            queue.add(new int[] { i, j + 1, si, (j + 1) % 10 != 0 ? sj + 1 : sj - 8 });//下边一个位置
        }
        return res;
    }
}
元の記事を21件公開しました 賞賛されました0 訪問数85

おすすめ

転載: blog.csdn.net/weixin_43963453/article/details/105389942