286. Walls and Gates

    /*
     * 286. Walls and Gates
     * 2016-7-1 by Mingyang
     * 好吧,这道题目我们不需要想太多,就算题目标的是BFS,可是个人还是习惯做dfs
     * 基本的dfs不需要判断重复因为可以revisite
     */
     public void wallsAndGates(int[][] rooms) {
            for (int i = 0; i < rooms.length; i++)
                for (int j = 0; j < rooms[0].length; j++)
                    if (rooms[i][j] == 0) 
                        dfs(rooms, i, j, 0);
            }
           private void dfs(int[][] rooms, int i, int j, int d) {
              if (i < 0 || i >= rooms.length || j < 0 || j >= rooms[0].length || rooms[i][j] < d) 
                  return;
               rooms[i][j] = d;
   //这个地方写的妙,初学者会想d到底是不是最小的呢,其实在每个门向周围的时候辐射已经考虑到这个先后问题了
               dfs(rooms, i - 1, j, d + 1);
               dfs(rooms, i + 1, j, d + 1);
               dfs(rooms, i, j - 1, d + 1);
               dfs(rooms, i, j + 1, d + 1);
          }
原文地址:https://www.cnblogs.com/zmyvszk/p/5634777.html