洛谷P1162 - 填涂颜色

题目描述

由数字 0 0 0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 1 1 构成,围圈时只走上下左右 4 4 4 个方向。现要求把闭合圈内的所有空间都填写成 2 2 2。例如: 6 × 6 6\times 6 6×6 的方阵( n = 6 n=6 n=6),涂色前和涂色后的方阵如下:

0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1

输入格式

每组测试数据第一行一个整数 n ( 1 ≤ n ≤ 30 ) n(1 \le n \le 30) n(1n30)

接下来 n n n 行,由 0 0 0 1 1 1 组成的 n × n n \times n n×n 的方阵。

方阵内只有一个闭合圈,圈内至少有一个 0 0 0

输出格式

已经填好数字 2 2 2 的完整方阵。

样例 #1

样例输入 #1

6
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1

样例输出 #1

0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1

提示

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 30 1 \le n \le 30 1n30

一、错误分析

题意就是把被1包围的0改成2。
那么只需要找到包围起来的第一个0的坐标,就可以把所有被包围的0改成2。
第一个0的坐标是第一个1的右下角?
那么就有了下面错误的代码,WA了一个测试点

//错误代码
#include <iostream>
#include <queue>
using namespace std;
int n;
int dir[][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int a[33][33];
struct node
{int x, y;
};
int main()
{cin >> n;int sx = 0, sy = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){cin >> a[i][j];if (a[i][j] == 1 && sx == 0){sx = i, sy = j;}}sx++;sy++;// bfs广度优先queue<node> q;q.push({sx, sy});while (!q.empty()){node p = q.front();q.pop();for (int i = 0; i < 4; i++){int nx = p.x + dir[i][0], ny = p.y + dir[i][1];if (!(nx>n||ny>n||nx<1||ny<1)&&a[nx][ny] == 0){q.push({nx, ny});a[nx][ny] = 2;}}}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << a[i][j] << " ";}cout << endl;}
}

那么当墙有厚度的时候,这种找0的方法是错误的。
比如下面这组测试数据。

6 
1 1 1 1 1 1 
1 0 0 0 0 0 
1 1 1 1 1 1 
1 1 0 0 1 1 
1 1 0 0 1 1 
1 1 1 1 1 1 

二、正确分析

先将二维数组初始化为2,将有1的地方改为1,那么被1包围之外的2就是连续的了,只需要使用dfs或bfs就能够把所有包围之外的2改为0。
二维数组需要往外扩展一圈,这样就能保证包围之外的2是连续的。
如[1,n]的区间拓展为[0,n+1].

方法1.DFS

#include <iostream>
#include <queue>
using namespace std;
int n;
int dir[][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int a[35][35];
struct node
{int x, y;
};
void dfs(int x,int y)
{if(x>n+1||y>n+1||x<0||y<0) return ;if(a[x][y] == 1||a[x][y]==0) return;a[x][y]=0;for (int i = 0; i < 4; i++){dfs(x + dir[i][0],y + dir[i][1]);}
}
int main()
{for(int i=0;i<33;i++)for(int j=0;j<33;j++){a[i][j]=2;}cin >> n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){int t;cin >> t;if(t==1) a[i][j]=1;}dfs(0,0);for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << a[i][j] << " ";}cout << endl;}
}

方法2.BFS

#include <iostream>
#include <queue>
using namespace std;
int n;
int dir[][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int a[35][35];
struct node
{int x, y;
};
int main()
{for(int i=0;i<33;i++)for(int j=0;j<33;j++){a[i][j]=2;}cin >> n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){int t;cin >> t;if(t==1) a[i][j]=1;}queue<node> q;q.push({0, 0});while (!q.empty()){node p = q.front();q.pop();for (int i = 0; i < 4; i++){int nx = p.x + dir[i][0], ny = p.y + dir[i][1];if (!(nx>n+1||ny>n+1||nx<0||ny<0)&&a[nx][ny] == 2){q.push({nx, ny});a[nx][ny] = 0;}}}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << a[i][j] << " ";}cout << endl;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

前 言 前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现…

Visual Studio 2022的MFC框架——应用程序向导

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Visual Studio 2022开发工具下的MFC框架知识。 MFC(Microsoft Foundation Class&#xff0c;微软基础类库&#xff09;是微软为了简化程序员的开发工作所开发的一套C类的集合&#xf…

大模型训练的一些坑点和判断

在没有完全复现chatgpt之前&#xff0c;这些东西都是包大人根据公开资料和实践经验收敛出来的判断&#xff0c;仅供参考&#xff0c;所有的论断都有可能被新技术推翻。 1.冷启动可能是一个很重要的东西。 大模型的训练过程就是一步一步从全网数据得到的语言模型逐渐逼近接近人…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本&#xff1a;otp_win64_23.2 rabbitmq-server-3.8.16 版本说明&#xff1a;https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…

AI_背景知识

AI背景知识 一、生成式预训练模型&#xff08;GPT: Generative Pre-trained Transformer&#xff09;二、大语言模型&#xff08;LLM: Large Language Model&#xff09;1、大语言模型、GPT、Transormer 关系2、Transformer的多功能&#xff1a;从翻译到代码生成 三、词向量检索…

力扣:55. 跳跃游戏(Python3)

题目&#xff1a; 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣 示例&#xf…

想要保证办公协同文档的安全?这个权限科普你一定要看

企业在设置办公协同文档的时候&#xff0c;通常需要设置权限来确保数据的安全和保密性&#xff0c;并控制用户对文档的访问和编辑权限。looklook今天就从办公协同文档的权限出发&#xff0c;来和大家聊聊这些常见的权限设置。 办公协同文档的权限 1.阅读权限&#xff1a;只允许…

【vim 学习系列文章 4 - vim与系统剪切板之间的交互】

文章目录 背景1.1.1 vim支持clipboard 检查1.1.2 vim的寄存器 上篇文章&#xff1a;【vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容】 背景 从vim中拷贝些文字去其它地方粘贴&#xff0c;都需要用鼠标选中vim的文字后&#xff0c;Ctrlc、Ctrlv&#x…

怎么绘制汤姆索亚历险记思维导图?掌握这几个绘制步骤就可以

怎么绘制汤姆索亚历险记思维导图&#xff1f;如果你正在为学习汤姆索亚历险记而感到困惑&#xff0c;或者你想要更好地理解小说中的人物关系、情节和舞台背景&#xff0c;那么一个清晰的思维导图就可以帮助你梳理思路。那么下面就给大家介绍一下绘制步骤。 在进行思维导图绘制的…

前端面试的性能优化部分(7)每天10个小知识点

目录 系列文章目录前端面试的性能优化部分&#xff08;1&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;2&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;3&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;4&#xff09;每天…

docker容器监控:Cadvisor +Prometheus+Grafana的安装部署

目录 Cadvisor PrometheusGrafana的安装部署 一、安装docker&#xff1a; 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 二、部署Cadvisor 1、被监控主机上部署Cadvisor容器 2、访问cAdvisor页面 三、安装prometheus 1、部署Prometheus…

Clion开发Stm32之存储模块(W25Q64)驱动编写

前言 涵盖之前文章: Clion开发STM32之HAL库SPI封装(基础库) W25Q64驱动 头文件 #ifndef F1XX_TEMPLATE_MODULE_W25Q64_H #define F1XX_TEMPLATE_MODULE_W25Q64_H#include "sys_core.h" /* Private typedef ---------------------------------------------------…

LNMP搭建

LNMP&#xff1a;目前成熟的企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件 能够提供静态页面服务&#xff0c;也可以提供动态web服务。 这是一个缩写 L linux系统&#xff0c;操作系统。 N nginx网站服务&#xff0c;也可也理解为前端&#xff0c…

.ps1和.bat的区别

.ps1和.bat的区别 .ps1 和 .bat 是两种不同的脚本文件类型&#xff0c;分别用于 PowerShell 和 Windows 批处理。它们在语法、功能和用途上有很大的区别&#xff1a; 1. 文件类型&#xff1a; .ps1 是 PowerShell 脚本文件的扩展名&#xff0c;用于编写和执行 PowerShell 脚…

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线&#xff0c;并画出来 // 1、 斑块的框 血管二值化图&#xff0c;pca 找到垂直血管壁的直线, 还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标&#xff0c;std::vector<cv::Point> points;for (int y 0; y <…

公文校对要点:确保准确性和规范性

公文校对是确保文档准确性和规范性的重要步骤。以下是公文校对的要点&#xff1a; 1.拼写和语法检查&#xff1a;仔细检查文档中的拼写错误和语法错误。确保词语的正确拼写&#xff0c;并使用正确的语法结构和标点符号。 2.信息准确性&#xff1a;核对文档中的事实和数据&#…

MySQL流程控制(二十八)

二八佳人体似酥&#xff0c;腰悬利剑斩愚夫&#xff0c;虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了MySQL变量(二十七) ,如果没有看过,请观看上一章 一. 定义条件与处理程序 定义条件是事先定义程序执行过程中可能遇到的问题&#xff0c;处理程序定义了在遇到问题时应…

三言两语说透webpack对vue的编译

目录 1.写在前面 2.前置条件 3.源码分析 4.大厂面试回答 5.总结 1.写在前面 Webpack作为当下最流行的前端构建工具&#xff0c;它可以处理模块化的JavaScript项目&#xff0c;进行代码打包和优化。在Vue项目中&#xff0c;Webpack发挥着不可或缺的作用&#xff0c;它负责…

广州VR制作 | 利用VR元宇宙平台开展林地管理培训的优势

在林业领域&#xff0c;实地调查是获取准确数据和深入了解森林生态的重要手段。然而&#xff0c;传统的实地调查方法存在诸多问题&#xff0c;如时间成本高、人力物力投入大、安全风险高等。为了解决这些教学痛点&#xff0c;我们引入了虚拟现实(VR)技术&#xff0c;通过虚拟林…

我的创作纪念日【第一个2048day】

机缘 初心&#xff1a;研究生期间&#xff0c;帮老师做一个项目&#xff0c;过程中学习的东西想记录下来&#xff0c;于是&#xff0c;就选择了CADN让技术分享成为工作的一部分 收获 获得了1800多粉丝的关注获得了63万的访问量&#xff0c;其中《C#设计模式》专栏深受大家喜欢…