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);
        }
    }
}
相关推荐
码上有光4 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
RisunJan10 分钟前
Linux命令-semanage(SELinux 策略管理)
linux·运维·服务器
流浪00118 分钟前
Linux系统篇 21:文件(五)——动静态库、ELF 底层原理全解
linux·运维·服务器
snow@li21 分钟前
Spring Boot:项目服务器完整部署教程(零基础可直接实操)
服务器·spring boot·后端
Dawn-bit25 分钟前
Linux救援模式和系统恢复
linux·运维·服务器·云计算·运维开发
李昊哲小课27 分钟前
咖啡工坊 · FastAPI 22 章教程合集
服务器·人工智能·python·fastapi
十八岁牛爷爷30 分钟前
Linux 进程与进程状态・三层级深度解析
linux·运维·服务器
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
不会就选b1 小时前
linux之进程管理(二)--替换
linux·运维·服务器