P1162 填涂颜色
1|0P1162 填涂颜色
大概思路,暴搜所有
思路是理论可行,但是代码容易出问题。
一开始
对照数据发现有一些点if (is_circle) vis[dx][dy]++;
这是不严谨的,具体原因还没法描述出来,但是修改思路还是很显然,我改成了if (is_circle) vis[dx][dy] = 2;
,再次提交,还是有一些点没过。
再对照一些数据点,发现一些本不可以被包围的圈内出现了零散的
假设一次搜索进入的色块是没有被围住的
那么第一次进入搜索直到第一次触边前,
is_circle == true
,如此一来,直到第一次触边前所有的
vis[x][y]
都被理所当然的赋为了.
知道这个问题之后,要解决就简单了,递归返回到本次函数后,再专门对is_circle
进行判断,如果变成了vis[x][y]
还原为
AC code
虽然如此,但显然这个做法是不优秀的,发现题解中有一个很妙的方法。
先看代码
这个代码有两个关键思路
- 逆向思维
- 只从外层进行搜索染色,那么所有没有被染色到的显然就是被墙围住的。
- 构造外圈
- 如果用for循环枚举外层的
进行搜索则不够优雅 - 直接把存地图时存
然后在 构造外层,等于说用一个大边围住了整个地图,而这个边是可通过的,因此只要从 开始搜就行,不用找其他外层点。
- 如果用for循环枚举外层的
妙哉。
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17797109.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17797109.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
分类:
做题报告(2023+)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下