码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【华为校招】【校招】【Java】污染水域(DFS)


    ■ 题目描述
    输入一行字符串,字符串可转换为N*N的数组,数组可认为是一个水域,判断多少天后,水域被全部污染。
    数组中只有0和1,0表示纯净,1表示污染,每天只可污染上下左右的水域,如果开始全部被污染,或永远无法污染,则返回-1。
    例如
    示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
    输入
    1,0,1,0,0,0,1,0,1
    全选代码
    复制
    转化为数组为:
    1 0 1
    0 0 0
    1 0 1
    输出:
    2
    全选代码
    复制
    样例解释
    第一天后水域变为
    1 1 1
    1 0 1
    1 1 1
    第二天全部被污染
    输入
    0,0,0,0
    全选代码
    复制
    输出
    -1

    public class PolluteWater {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String[] s = sc.nextLine().split(",");
            int N = (int) Math.sqrt(s.length);
            int[][] grid = new int[N][N];
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    grid[i][j] = Integer.parseInt(s[j + i * N]);
                }
            }
            // 图的多源BFS
            int[] dx = new int[]{0, 0, 1, -1};
            int[] dy = new int[]{1, -1, 0, 0};
            Queue<int[]> queue = new ArrayDeque<>();
            // 将所有污染源都入队
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    if (grid[i][j]==1){
                        queue.offer(new int[]{i,j});
                    }
                }
            }
            // 全部被无污染或者永远无法被污染
            if (queue.size() == 0 || queue.size() == N * N) {
                System.out.println(-1);
                return;
            }
            // 从各个污染源开始,一圈圈遍历
            int[] node = null;  // 定义到循环外面,方便输出结果
            while (!queue.isEmpty()){
                node = queue.poll();
                int x = node[0], y = node[1];
                for (int i = 0; i < 4; i++) {  // 上下左右扩散
                    int newX = x + dx[i];
                    int newY = y + dy[i];
                    // 越界或者不是净水
                    if (newX < 0 || newX >= N || newY < 0 || newY >= N || grid[newX][newY] != 0) {
                        continue;
                    }
                    // 直接修改原数组,把污染源改为净水
                    grid[newX][newY] = grid[x][y] + 1;
                    queue.offer(new int[]{newX, newY});
                }
            }
            // 返回最后一次遍历到净水的天数 - 1,或者输出当前数组的最大值-1
            System.out.println(grid[node[0]][node[1]] - 1);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    程序员是如何看待“祖传代码”的?
    【第 8 章 MySQL InnoDB ClusterSet 】
    Macbook pro M1使用免费的方法读写NTFS的折腾之路
    ESP32设备驱动-I2C-LCD1602显示屏驱动
    计算机毕业设计Python+django的家政管理系统设计(源码+系统+mysql数据库+Lw文档)
    防火墙基础之路由器与防火墙单臂路由和DHCP接口地址池的配置
    SSL OV证书和DV、EV证书的区别
    Elasticsearch介绍及插件head和kibana下载
    ModbusTCP、TCP/IP都走网线,一样吗?
    【昇腾产品应用】英码科技EA500I基于昇腾Mind SDK实现实时人体关键点检测
  • 原文地址:https://blog.csdn.net/qq_27695659/article/details/126412983
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号