Day51 >> 99、计数孤岛 + 100、最大岛屿面积

代码随想录-图论Part2

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);
        }
    }
}
相关推荐
Java程序员威哥2 小时前
SpringBoot多环境配置实战:从基础用法到源码解析与生产避坑
java·开发语言·网络·spring boot·后端·python·spring
Thanwind2 小时前
系统可观测性解析与其常用套件
java
茶本无香2 小时前
设计模式之六—组合模式:构建树形结构的艺术
java·设计模式·组合模式
LJianK12 小时前
select .. group by
java·数据库·sql
猿小羽2 小时前
[TEST] Spring Boot 快速入门指南 - 1769246843980
java·spring boot·后端
阿蒙Amon2 小时前
C#每日面试题-简述this和base的作用
java·面试·c#
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于SSM的航班管理系统的设计与实现为例,包含答辩的问题和答案
java
indexsunny2 小时前
互联网大厂Java求职面试实战:Spring Boot、微服务与Redis缓存技术解析
java·spring boot·redis·微服务·面试·电商·技术栈
小李独爱秋2 小时前
计算机网络经典问题透视:怎样才能在自己的计算机中看见周围无线局域网的SSID?
服务器·计算机网络·信息与通信·无线网络·ssid