我正在编写一个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函数定义。我已经在代码和评论中更新了它。
对此的任何帮助都会很棒!