0
点赞
收藏
分享

微信扫一扫

蛇梯棋

攻城狮Chova 2021-09-21 阅读 50
今日算法
题目描述
示例:
题目解析:
题目解析:
实现:
class Solution {
    int n = 0;
    public int snakesAndLadders(int[][] board) {
        n = board.length;
        int[] nums = new int[n * n];
        boolean flag = true;
        int k = 0;
        for (int i = n - 1; i >= 0; i--) {
            if (flag) {
                for (int j = 0; j < n; j++) {
                    nums[k++] = board[i][j];
                }
                flag = false;
                continue;
            }
           if (!flag) {
                for (int j = n - 1; j >= 0; j--) {
                    nums[k++] = board[i][j];
                }
                flag = true;
                continue;
           } 
        }
        return bfs(nums);
    }
    public int bfs(int[] nums) {
        Queue<Integer> queue = new LinkedList<>();
        Map<Integer, Integer> map = new HashMap<>();
        queue.offer(0);
        map.put(0, 0);
        while (!queue.isEmpty()) {
            int poll = queue.poll();
            int num = map.get(poll);
            if (poll == nums.length - 1) return num;
            for (int i = 1; i <= 6; i++) {
                int cur = poll + i;  
                if (nums[cur] != -1) cur = (nums[cur] - 1);
                if (cur == n * n - 1) return ++num;
                if (map.containsKey(cur)) continue;
                map.put(cur, num + 1);
                queue.offer(cur);
            }
        }
        return -1;
        }
}
举报

相关推荐

0 条评论