力扣200 岛屿数量

作者 : admin 本文共683个字,预计阅读时间需要2分钟 发布时间: 2024-06-3 共2人阅读
class Solution {
// public int[][] flag;
int [][] direction = {{-1,0},{1,0},{0,1},{0,-1}};
public void bfs(int i, int j, char[][] grid){
Deque<int[]> d = new LinkedList<>();
d.add(new int[]{i,j});
while(!d.isEmpty()){
int [] v = d.peek();
d.poll();
for(int t = 0; t < 4; t++){
int x = v[0]+direction[t][0];
int y = v[1]+direction[t][1];
if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0')
continue;
d.add(new int[]{x,y});
grid[x][y] = '0';
}
}
}
public int numIslands(char[][] grid) {
int m = grid.length, n = grid[0].length,sum = 0;
// flag = new int[m][n];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(grid[i][j] == '1'){
grid[i][j] = '0';
bfs(i,j,grid);
sum++;
}
}
}
return sum;
}
}

数据结构:队列+数组
算法:从0到所有,遍历过的要把标记上,第一次遍历且满足条件就是一个岛,从它出发利用广度优先遍历标记这个岛。
易出错的点:注意是数字1还是字符1

本站无任何商业行为
个人在线分享 » 力扣200 岛屿数量
E-->