信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(2):洛谷P1162:填涂颜色

news/2024/12/3 6:48:31/

信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(2):洛谷P1162:填涂颜色

在这里插入图片描述

题目描述

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

如果从某个 0 0 0 出发,只向上下左右 4 4 4 个方向移动且仅经过其他 0 0 0 的情况下,无法到达方阵的边界,就认为这个 0 0 0 在闭合圈内。闭合圈不一定是环形的,可以是任意形状,但保证闭合圈内 0 0 0 是连通的(两两之间可以相互到达)。

0 0 0 0 0 0
0 0 0 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 1 0 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 0 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 1 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

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
/*深搜思路: 原有方阵:1到n行,1到n列在原有方阵的外围加上一圈0:0到n+1行,0到n+1列 从dfs(0,0)开始泛洪去找所有外围的0,将其染色成3 经过dfs搜索后,我们的方阵就变成了外围是3,中间是1,内层是0然后if判断输出想要的结果即可	
*/ 
int n,a[40][40]; 
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void dfs(int x,int y){a[x][y]=3;//将外围的0染色成3int nx,ny;for(int i=0;i<=3;i++){nx=x+dx[i];ny=y+dy[i];//注意边界的判断条件是扩大后的方阵边界 if(nx>=0 && nx<=n+1 && ny>=0 && ny<=n+1 && a[nx][ny]==0){dfs(nx,ny);} }
}
int main(){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}//深搜 dfs(0,0);//关键点:从0,0开始搜索 //输出 for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]==3) cout<<0<<" ";else if(a[i][j]==1) cout<<1<<" ";else cout<<2<<" ";}cout<<endl;}return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容


http://www.ppmy.cn/news/1551928.html

相关文章

最新保姆级Linux下安装与使用conda:从下载配置到使用全流程

目录 1.前言 2.什么是conda 3.miniconda和anaconda的对比与选择 4.安装前需要确认的东西&#xff08;非常重要&#xff09; &#xff08;1&#xff09;安装的目录 &#xff08;2&#xff09;安装目录剩余的空间大小 &#xff08;3&#xff09;bashrc配置文件位置&#xff0…

CSS底层基础:小白速来

1. CSS简介 CSS (Cascading Style Sheets) 是一种用来描述HTML或XML文档样式的语言。它使得开发者能够控制网页的布局和外观&#xff0c;包括字体、颜色、间距等。CSS通过选择器来指定要应用样式的元素&#xff0c;并定义这些元素的具体样式属性。 基本结构示例&#xff1a; …

《大道平渊》· 卅 —— 凡做事皆應抓其關鍵

《大道平淵》 凡做事皆應抓其關鍵, 切中肯綮, 統籌兼顧, 其輕重緩急心中應自有丘壑。思維混亂且摸不清頭緒的人, 往往只關注事情無關緊要的部分, 卻對其核心熟視無睹。他們把大量時間和耐心全部浪費在了既無關緊要又細枝末節的小事上, 而對那些重要的事情卻抽不出時間來處理。 …

无线网络技术的发展与技术

无线网络技术在过去几十年中取得了巨大的进步&#xff0c;从最初的2G到如今的5G&#xff0c;无线通信已经深刻改变了我们的生活和工作方式。 本文将详细介绍无线网络技术的演进历程和相关的技术细节&#xff0c;包括无线传输原理、频谱利用、多址技术、调制与解调技术等&#…

Go学习笔记之数据类型转换

Go数据类型转换 整型与浮点型转换 package mainimport ("fmt""strconv" )func main() {// 类型转换建议是从低位的类型转换到高位的类型,比如从int转换到float64,从float32转换到float64d : 10f : 3.14fmt.Println(float64(d) f)}其他类转换成字符串 //…

bash命令缓存导致命令执行失败的问题

1、问题背景 为了修复老版本 vsftpd 的安全漏洞&#xff0c;需要把生产环境上 vsftpd 版本升级到 vsftpd-3.0.5&#xff0c;因为直接使用 rpm 包的方式进行升级还涉及到下层依赖包的升级(生产环境上的依赖包版本不能随意变更&#xff0c;可能会影响其他上层应用)&#xff0c;所…

C++零基础入门:基于树莓派Pico的趣味编程体验

"Hello World!" 是每位编程爱好者的起点。通过这个简单的项目&#xff0c;不仅可以了解C的基本语法&#xff0c;还能体验树莓派Pico硬件开发的乐趣。本文将深入解析如何通过“Hello World!”项目&#xff0c;帮助零基础的初学者掌握基础编程技能&#xff0c;并开启信…

网络安全——浅谈HTTP协议

HTTP请求 HTTP请求是客户端往服务端发送请求动作&#xff0c;告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成&#xff1a; 状态行&#xff1a;包括请求方式Method、资源路径URL、协议版本Version&#xff1b;请求头&#xff1a;包括一些访问的域名、…