18491 岛屿的数量
⭐️难度:中等
🌟考点:搜索
📖
📚
java
import java.util.*;
public class Main {
static int[][] a = new int[505][505];
static int[] dx = {0,0,1,-1};
static int n;
static int[] dy = {1,-1,0,0}; // 用数组表示移动方向,分别对应 右 左 上 下
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
a[i][j] = sc.nextInt();
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= n; j++) {
if(a[i][j] == 1){
bfs(i,j);
ans ++;
}
}
}
System.out.println(ans);
}
static void bfs(int x,int y){
a[x][y] = 0; // 访问过的陆地变成海洋
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int ax = dx[i] + x;
int ay = dy[i] + y;
if(ax < 1 || ay < 1 || ax > n + 1 || ay > n + 1 || a[ax][ay] == 0) continue; // 检查坐标合法,且是陆地
bfs(ax,ay);
}
}
}
}
🍎笔记