使用dfs
import java.util.*;
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
// 深度优先 dfs 把结果修改
public int solve (char[][] grid) {
// write code here
int m = grid.length;
if (m == 0){
return 0;
}
int n = grid[0].length;
int ans = 0;
for (int i = 0; i < m ; i ++){
for (int j = 0; j < n; j++){
if (grid[i][j] == '1'){
ans++;
dfs(grid, i , j);
}
}
}
return ans;
}
private void dfs(char[][] grid, int i, int j){
grid[i][j] = '0';
int m = grid.length;
int n = grid[0].length;
if (i - 1 >= 0 && grid[i - 1][j] == '1'){
dfs(grid, i - 1, j);
}
if (i + 1 < m && grid[i + 1][j] == '1' ){
dfs(grid, i + 1, j);
}
if (j - 1 >= 0 && grid[i][j - 1] == '1'){
dfs(grid, i, j - 1);
}
if (j + 1 < n && grid[i][j + 1] == '1'){
dfs(grid, i , j + 1);
}
}
}
使用bfs
import java.util.*;
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
// 广度优先
public int solve (char[][] grid) {
// write code here
int m = grid.length;
if (m == 0){
return 0;
}
int n = grid[0].length;
int ans = 0;
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
if (grid[i][j] == '1'){
grid[i][j] = '0';
ans++;
Queue<Integer> row = new LinkedList<>();
Queue<Integer> col = new LinkedList<>();
row.offer(i);
col.offer(j);
while (!row.isEmpty()){
int r = row.poll();
int c = col.poll();
if (r - 1 >= 0 && grid[ r - 1][c] == '1'){
row.offer(r - 1);
col.offer(c);
grid[r - 1][c] = '0';
}
if (r + 1 < m && grid[r + 1][c] == '1'){
row.offer(r + 1);
col.offer(c);
grid[r + 1][c] = '0';
}
if (c - 1 >= 0 && grid[r][c - 1] == '1'){
row.offer(r);
col.offer(c - 1);
grid[r][c - 1] = '0';
}
if (c + 1 < n && grid[r][ c + 1] == '1'){
row.offer(r);
col.offer(c + 1);
grid[r][c + 1] = '0';
}
}
}
}
}
return ans;
}
}