题目要求

题目链接

分析

这个题,很难直接确定那里是1这个边界并找到内部的0的,想想就很难受。

但是数学上有个思想叫 “正难则反” 不是吗?

我们不妨把所有0换成2,再从四条边上的每个点开DFS,把搜到的2全换成0,这种DFS不可能搜到内部的2(被一圈1围着),如此,巧妙的规避了“圈内”这个复杂的条件,简化了问题求解。

注意防越界!

AC代码(Java语言描述)

import java.util.Scanner;public class Main {private static int num;private static byte[][] array;private static void dfs(int x, int y) {if (array[x][y] == 1) {return;} else {array[x][y] = 0;}if (x > 0 && array[x-1][y] == 2) {dfs(x-1, y);}if (x < num-1 && array[x+1][y] == 2) {dfs(x+1, y);}if (y > 0 && array[x][y-1] == 2) {dfs(x, y-1);}if (y < num-1 && array[x][y+1] == 2) {dfs(x, y+1);}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);num = Integer.parseInt(scanner.nextLine());array = new byte[num][num];for (int i = 0; i < num; i++) {String[] line = scanner.nextLine().split(" ");for (int j = 0; j < num; j++) {if ("0".equals(line[j])) {array[i][j] = 2;} else {array[i][j] = Byte.parseByte(line[j]);}}}scanner.close();for (int i = 0; i < num; i++) {dfs(i, 0);dfs(i, num-1);dfs(0, i);dfs(num-1, i);}for (int i = 0; i < num; i++) {StringBuilder builder = new StringBuilder();for (int j = 0; j < num; j++) {builder.append(array[i][j]).append(' ');}System.out.println(builder.toString().trim());}}}

填涂颜色(洛谷P1162题题解,Java语言描述)相关推荐

  1. 广度优先搜索——填涂颜色(洛谷 P1162)

    题目选自洛谷P1162 首先讲一下思路:根据题意,当找到第一个1时,其右下必然是圈内的0,那么只要从这个0开始广搜寻找联通块就可以了.(因为圈只有一个,那么当找到第一个1之后便要打断循环,很重要!) ...

  2. 线性存储的最短平均检索时间(洛谷P1253题题解,Java语言描述)

    题目要求 P1253题目链接 分析 很像 ~洛谷P1223题题解~,也是一种类似SJF的贪心法. 排个序,由于两个不大于10000的数,乘起来还是int,就使用int属性吧. 数据量小,所以Scann ...

  3. 队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)

    题目要求 P1996题目链接 分析 以前就研究过"约瑟夫环"问题: <单循环链表求解约瑟夫环问题(Java语言描述)> <杀人游戏~约瑟夫环(洛谷P1145题题解 ...

  4. 用完全平方数填满指定区域(洛谷P2666题题解,Java语言描述)

    题目要求 P2666题目链接 分析 按照题目要求,无非是用四个完全平方数填满指定区域罢了. N就是多大区域而已啦,块数实际上是4块,也就是4个完全平方数. 这样看来这题不难,但我们打个表也是极好的. ...

  5. 涂国旗(洛谷P3392题题解,Java语言描述)

    题目要求 题目链接 分析 我做的就比较暴力啦,由于三种颜色都至少有一行,所以: W:[0,N−2)W:[0, N-2)W:[0,N−2) B:[1,N−1)B: [1, N-1)B:[1,N−1) R ...

  6. 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)

    题目要求 P1101题目链接 分析 可以用DFS做,但我立下了个Flag,所以就用了朴素的枚举来做.... 结果,我的天哪,做了好几个小时-- 其实这种地图题,真的适合 DFS or BFS or D ...

  7. 快速幂||取余运算【模板】(洛谷P1226题题解,Java语言描述)

    题目要求 P1226题目链接 分析 标准的快速幂取模算法板子,之前这个算法我在这篇文章中讲过了:<快速幂算法详解&&快速幂取模算法详解>. 这里选择使用比较简单的API实现 ...

  8. 贪心策略摘果子(洛谷P1478题题解,Java语言描述)

    题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...

  9. 麦森数(洛谷P1045题题解,Java语言描述)

    题目要求 题目链接 分析 这题挺经典的,快速幂取模算法,如果求出大数再取模就可能T掉. 之前有篇文章写了这个算法:<快速幂算法详解&&快速幂取模算法详解> 既然是Java, ...

最新文章

  1. HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析
  2. tideways+xhgui搭建php 7的性能测试环境
  3. 文巾解题 981. 基于时间的键值存储
  4. linux 修改hostname
  5. android自定义view生命周期,android基础之自定义view
  6. VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 |
  7. 台式电脑键盘字母乱了_电脑键盘上的一个不起眼的按键,特别实用却被粗心的人忽略...
  8. PID控制器改进笔记之二:改进PID控制器之手自动切换
  9. mariadb mysql 创建_MariaDB 创建数据库,学习MariaDB,MariaDB教程,MariaDB手册,MariaDB学习,MariaDB实例 | 开发学院...
  10. 图像处理、语音处理的应用及前沿技术_自主知识产权的2微米级3D视觉相机应用于高精度和高反光物体的缺陷检测...
  11. [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
  12. EMC CTO:IT进化到“以数据为核心”的阶段
  13. 【FPGA频率计】基于FPGA的数字频率计开发,VHDL编程实现
  14. 如何安装Win10/Ubuntu双系统
  15. PDFjs的使用说明书
  16. 3DMax一个重要功能,通过它制作出来的影视作品有很强立体感
  17. 引用bootstrap的两种方法
  18. 超全zookeeper知识点与实战
  19. 一念起,天涯咫尺;一念灭,咫尺天涯。—第八天
  20. 关于System.Windows.Baml2006.TypeConverterMarkupExtension引发的异常

热门文章

  1. express+handlebars 快速搭建网站前后台
  2. Windows下pip 离线包安装
  3. LeetCode: Convert BST to Greater Tree
  4. pandas入门(2)
  5. 将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型
  6. 使用ActionScript实现滤镜效果
  7. 从头开始建立神经网络翻译及扩展
  8. java,js获取数组最大/小值
  9. Ubuntu开启允许root用户远程登录
  10. 依赖注入底层反射原理_PHP基于反射机制实现自动依赖注入的方法详解_php技巧...