Walls and Gates

https://www.lintcode.com/zh-cn/problem/walls-and-gates/

import java.util.ArrayList;
import java.util.List;

public class Solution {
    /**
     * @param rooms: m x n 2D grid
     * @return: nothing
     */
    public void wallsAndGates(int[][] rooms) {
        // write your code here
        List nodes = new ArrayList<>();
        for (int i = 0; i < rooms.length; i++) {
            int[] room = rooms[i];
            for (int j = 0; j < room.length; j++) {
                int i1 = room[j];
                if (i1 == 0) {
                    nodes.add(new Node(j, i));
                }
            }
        }
        int INF = (int) (Math.pow(2, 32) - 1);
        for (int i = 0; i < nodes.size(); i++) {
            Node node = nodes.get(i);
            int value = rooms[node.y][node.x];
            value++;
//            左边
            if (node.x > 0) {
                if (rooms[node.y][node.x - 1] == INF) {
                    rooms[node.y][node.x - 1] = value;
                    nodes.add(new Node(node.x - 1, node.y));
                }
            }
            if (node.x < rooms[0].length - 1) {
                if (rooms[node.y][node.x + 1] == INF) {
                    rooms[node.y][node.x + 1] = value;
                    nodes.add(new Node(node.x + 1, node.y));
                }
            }
            if (node.y > 0) {
                if (rooms[node.y - 1][node.x] == INF) {
                    rooms[node.y - 1][node.x] = value;
                    nodes.add(new Node(node.x, node.y - 1));
                }
            }
            if (node.y < rooms.length - 1) {
                if (rooms[node.y + 1][node.x] == INF) {
                    rooms[node.y + 1][node.x] = value;
                    nodes.add(new Node(node.x, node.y + 1));
                }
            }
        }
    }

    private class Node {
        int x;
        int y;

        public Node(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}

你可能感兴趣的:(Walls and Gates)