计算Java的岛数

时间:2016-11-24 16:50:14

标签: java

我正在编写一个Java程序来解决以下问题陈述:

给出1'(陆地)和'0'(水)的2d网格图,计算岛屿数量。岛被水包围,通过水平或垂直连接相邻的土地而形成。您可以假设网格的所有四个边都被水包围。

我经历了实现的算法,它主要使用DFS来计算连接组件的数量。

以下是我写的代码:

public class Solution {
    public int numIslands(char[][] grid) {

        boolean [][] visited = new boolean [grid.length][grid[0].length];
        int numClusters = 0;

        for(int i=0; i<visited.length; i++)
        {   for(int j=0; j<visited[0].length; j++)
                visited[i][j] = false;
        }

        for(int i=0; i<visited.length; i++)
        {   for(int j=0; j<visited[0].length; j++)
            {   if(grid[i][j] == '0')
                {   visited[i][j] = true;
                    continue;
                }

                if(!visited[i][j])
                {
                    DFS(grid,i,j,visited);
                    numClusters++;
                }
            }
        }

    return numClusters;

    }

     public void DFS(char[][] grid, int i, int j, boolean[][] visited)
        {
            if(i > grid.length || j > grid[0].length || i < 0 || j < 0)
                return;

               if(visited[i][j]) // Line where the error is thrown.
                    return;

                visited[i][j] = true;

                if(grid[i][j] == '0')
                    return;

                DFS(grid,i+1,j,visited);
                DFS(grid,i-1,j,visited);
                DFS(grid,i,j+1,visited);
                DFS(grid,i,j-1,visited);

        }
}

当我尝试为输入执行此操作时,我收到了一个ArrayIndexOutOfBoundsException

["11000","11000","00100","00011"]

错误在线 - 如果(访问[i] [j])DFS函数定义。我已经在代码和评论中更新了它。

对此的任何帮助都会很棒!

0 个答案:

没有答案