99、计数孤岛
java
import java.util.Scanner;
public class Main {
public static int[][] dir = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
public static void dfs(boolean[][] visited, int x, int y, int[][] grid) {
for (int i = 0; i < 4; i++) {
int nextX = x + dir[i][0];
int nextY = y + dir[i][1];
if (nextY < 0 || nextX < 0|| nextX >= grid.length || nextY >= grid[0].length) {
continue;
}
if (!visited[nextX][nextY] && grid[nextX][nextY] == 1) {
visited[nextX][nextY] = true;
dfs(visited, nextX, nextY, grid);
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int[][] grid = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
grid[i][j] = scanner.nextInt();
}
}
boolean[][] visited = new boolean[m][n];
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (!visited[i][j] && grid[i][j] == 1) {
ans++;
visited[i][j] = true;
dfs(visited, i, j, grid);
}
}
}
System.out.println(ans);
scanner.close();
}
}
100、最大岛屿面积
java
package test.java;
import java.util.Scanner;
public class dfsPart2 {
static final int[][] dir = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
static int result = 0;
static int count = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[][] map = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
map[i][j] = scanner.nextInt();
}
}
boolean[][] visited = new boolean[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!visited[i][j] && map[i][j] == 1) {
count = 0;
dfs(visited, i, j, map);
result = Math.max(result, count);
}
}
}
System.out.println(result);
scanner.close();
}
public static void dfs(boolean[][] visited, int x, int y, int[][] grid) {
count++;
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int newX = x + dir[i][0];
int newY = y + dir[i][1];
if (newX < 0 || newY < 0
|| newX >= grid.length || newY >= grid[0].length
|| visited[newX][newY] || grid[newX][newY] == 0) {
continue;
}
dfs(visited, newX, newY, grid);
}
}
}