首页 > 极客资料 博客日记
BFS 颜色填涂———洛谷p1162
2024-09-21 17:00:04极客资料围观21次
本篇文章分享BFS 颜色填涂———洛谷p1162,对你有帮助的话记得收藏一下,看极客之家收获更多编程知识
填涂颜色
题目描述
由数字 \(0\) 组成的方阵中,有一任意形状的由数字 \(1\) 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 \(2\)。例如:\(6\times 6\) 的方阵(\(n=6\)),涂色前和涂色后的方阵如下:
如果从某个 \(0\) 出发,只向上下左右 \(4\) 个方向移动且仅经过其他 \(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 \le n \le 30)\)。
接下来 \(n\) 行,由 \(0\) 和 \(1\) 组成的 \(n \times n\) 的方阵。
方阵内只有一个闭合圈,圈内至少有一个 \(0\)。
输出格式
已经填好数字 \(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\%\) 的数据,\(1 \le n \le 30\)。
问题分析
本题很明显是一个搜索问题,解决搜索问题常用的有两种方法BFS和DFS,如果使用DFS会发现它会花费很多时间回溯,因为我们在搜索时只需要标记我们需要的位置即可,并不需要考虑标记的顺序,所以本题我还是更偏向使用BFS
我们只需要从圈外的一个点出发,标记圈外所有0即可,所以我们需要一个固定是在圈外的点,在原图中好像没有这个点,我们可以在圈外再开一圈0即可
代码
#include<iostream>
#include<queue>
using namespace std;
int d[4][2] = { {0,-1},{0,1},{-1,0},{1,0} };
int a[50][50]; //多开一点准没错
int n;
queue<pair<int, int > >que;
void bfs(int x, int y) {
que.push(pair<int, int>(x, y));
while (!que.empty()) {
pair<int, int>t = que.front();
que.pop();
a[t.first][t.second] = 2;
for (int i = 0; i < 4; i++) {
//搜索四个方向
int nx = t.first + d[i][0], ny = t.second + d[i][1];
//别出界,且保证该点没有搜过,感觉访问数组会更慢些,所以放在了后面
if ( nx >= 0 && nx <= n + 1 && ny >= 0 && ny <= n + 1 && a[nx][ny] == 0 &&) {
que.push(pair<int, int>(nx, ny));
}
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
//从外附边界开始搜索
bfs(0, 0);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << 2 - a[i][j]<<' '; //这个空格欸~~
}
//别忘记每行之后要换行
cout << endl;
}
return 0;
}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”