岛屿问题
给你一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
class Solution {
LinkedList<geo> list = new LinkedList<>();
public int numIslands(char[][] grid) {
int count = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if(grid[i][j] == '1'){
count++;
list.addFirst(new geo(i,j));
grid[i][j] = '0';
BFS(grid);
}
}
}
return count;
}
private void BFS(char[][] grid) {
while (!list.isEmpty()) {
geo island = list.pollLast();
int i = island.i;
int j = island.j;
if(i < grid.length-1 && grid[i+1][j] != '0'){
list.addFirst(new geo(i+1,j));
grid[i+1][j] = '0';
}
if(j < grid[0].length-1 && grid[i][j+1] != '0'){
list.addFirst(new geo(i,j+1));
grid[i][j+1] = '0';
}
if(i>0 && grid[i-1][j] != '0'){
list.addFirst(new geo(i-1,j));
grid[i-1][j] = '0';
}
if(j>0 && grid[i][j-1] != '0'){
list.addFirst(new geo(i,j-1));
grid[i][j-1] = '0';
}
}
}
class geo{
int i;
int j;
geo(int i,int j){
this.i = i;
this.j = j;
}
}
}
传统BFS高手