NYOJ92 图像实用区域 【BFS】
碰到了一个曾经从未见过的奇怪问题:先上截图:
| 执行号 | 用户 | 题目 | 结果 | 时间 | 内存 | 语言 | 提交时间 |
|---|---|---|---|---|---|---|---|
userid=%E9%95%BF%E6%9C%A8" style="text-decoration:none; color:rgb(55,119,188)">长木 |
pid=92" style="text-decoration:none; color:rgb(55,119,188)">图像实用区域 |
Accepted |
508 | 5724 | C/C++ | 06-13 19:26:41 | |
userid=%E9%95%BF%E6%9C%A8" style="text-decoration:none; color:rgb(55,119,188)">长木 |
图像实用区域 | MemoryLimitExceeded | -- | -- | C/C++ | 06-13 18:24:34 | |
|
runid=895351" style="margin:0px; padding:0px"> |
长木 | 图像实用区域 | MemoryLimitExceeded | -- | -- | C/C++ | 06-13 18:23:05 |
|
runid=895348" style="margin:0px; padding:0px"> |
长木 | 图像实用区域 | MemoryLimitExceeded | -- | -- | C/C++ | 06-13 18:19:59 |
| 长木 | 图像实用区域 | MemoryLimitExceeded | -- | -- | C/C++ | 06-13 18:14:47 | |
| 长木 | 图像实用区域 | MemoryLimitExceeded | -- | -- | C/C++ | 06-13 18:08:41 | |
| 长木 | 图像实用区域 | MemoryLimitExceeded | -- | -- | C/C++ | 06-13 18:00:17 |
内存限制是65兆,改动之前超了6次,改动之后却只占5兆内存,真是奇了怪了。改动的地方不过在入队之前把像素点给标注为0...教训是改动后再入队列..原因应该是好些已经入队的点反复入队了。
图像实用区域
- 描写叙述
-
“ACKing”同学曾经做一个图像处理的项目时,遇到了一个问题,他须要摘取出图片中某个黑色线圏成的区域以内的图片,如今请你来帮助他完毕第一步,把黑色线圏外的区域所有变为黑色。

图1 图2
已知黑线各处不会出现交叉(如图2),而且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点)。
- 输入
- 第一行输入測试数据的组数N(0<N<=6)
每组測试数据的第一行是两个个整数W,H分表表示图片的宽度和高度(3<=W<=1440,3<=H<=960)
随后的H行,每行有W个正整数,表示该点的像素值。(像素值都在0到255之间,0表示黑色,255表示白色)
- 输出
- 以矩阵形式输出把黑色框之外的区域变黑之后的图像中各点的像素值。
- 例子输入
-
1
5 5
100 253 214 146 120
123 0 0 0 0
54 0 33 47 0
255 0 0 78 0
14 11 0 0 0 - 例子输出
-
0 0 0 0 0
0 0 0 0 0
0 0 33 47 0
0 0 0 78 0
0 0 0 0 0
AC代码:
//在外面加一圈非0,再广搜
#include <cstdio>
#include <queue>
using std::queue;
int t, w, h, arr[962][1442];
int mov[][2] = {-1, 0, 0, 1, 1, 0, 0, -1};
queue<int> Q; bool check(int x, int y){
if(x < 0 || y < 0 || x > h + 1 || y > w + 1)
return 0;
if(!arr[x][y]) return 0;
return 1;
} void BFS(){
int x, y, a, b;
Q.push(0); Q.push(0);
arr[0][0] = 0;
while(!Q.empty()){
x = Q.front(); Q.pop();
y = Q.front(); Q.pop();
for(int i = 0; i < 4; ++i){
a = x + mov[i][0];
b = y + mov[i][1];
if(check(a, b)){
arr[a][b] = 0;
Q.push(a); Q.push(b);
}
}
}
} int main(){
scanf("%d", &t);
while(t--){
scanf("%d%d", &w, &h);
for(int i = 0; i <= w + 1; ++i){
arr[0][i] = 1;
arr[h+1][i] = 1;
} for(int i = 1; i <= h; ++i){
arr[i][0] = 1;
for(int j = 1; j <= w; ++j)
scanf("%d", &arr[i][j]);
arr[i][w+1] = 1;
}
BFS();
for(int i = 1; i <= h; ++i){
for(int j = 1; j <= w; ++j){
if(j != w) printf("%d ", arr[i][j]);
else printf("%d\n", arr[i][j]);
}
}
}
return 0;
}
MLE代码:
#include <cstdio>
#include <queue>
using std::queue;
int t, w, h, arr[962][1442];
int mov[][2] = {-1, 0, 0, 1, 1, 0, 0, -1};
queue<int> Q; bool check(int x, int y){
if(x < 0 || y < 0 || x > h + 1 || y > w + 1)
return 0;
if(!arr[x][y]) return 0;
return 1;
} void BFS(){
int x, y;
Q.push(0); Q.push(0);
while(!Q.empty()){
x = Q.front(); Q.pop();
y = Q.front(); Q.pop();
arr[x][y] = 0; //不过这里不同
for(int i = 0; i < 4; ++i){
if(check(x + mov[i][0], y + mov[i][1])){
Q.push(x + mov[i][0]);
Q.push(y + mov[i][1]);
}
}
}
} int main(){
scanf("%d", &t);
while(t--){
while(!Q.empty()) Q.pop();
scanf("%d%d", &w, &h);
for(int i = 0; i <= w + 1; ++i){
arr[0][i] = 1;
arr[h+1][i] = 1;
} for(int i = 1; i <= h; ++i){
arr[i][0] = 1;
for(int j = 1; j <= w; ++j)
scanf("%d", &arr[i][j]);
arr[i][w+1] = 1;
}
BFS();
for(int i = 1; i <= h; ++i){
for(int j = 1; j <= w; ++j){
if(j != w) printf("%d ", arr[i][j]);
else printf("%d\n", arr[i][j]);
}
}
}
return 0;
}
NYOJ92 图像实用区域 【BFS】的更多相关文章
- ACM 图像有用区域
图像有用区域 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以 ...
- nyoj 92 图像有用区域
点击打开链接 图像有用区域 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取 ...
- 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。
四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...
- 简单的图像显著性区域特征提取方法-----opencv实现LC,AC,FT
https://blog.csdn.net/cai13160674275/article/details/72991049?locationNum=7&fps=1 四种简单的图像显著性区域特征 ...
- nyoj 92-图像有用区域 (BFS)
92-图像有用区域 内存限制:64MB 时间限制:3000ms 特判: No 通过数:4 提交数:12 难度:4 题目描述: “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取 ...
- 根据序列图像聚焦区域获取深度 Shape From Focus
最为超新新新新鸟...我也不知道第一篇文章应该写什么..所以,把自己最近正在研究的东西报一下吧, 研究的东西其实也不算深奥,就是对一个图像序列中的每张图像进行检测,发现每张图片的聚焦清晰区域,找到这个 ...
- iOS实现图像指定区域模糊
在大多图像处理中,我们会应用到高斯模糊处理图像,通常用它来减少图像噪声以及降低细节层次.在此文中介绍了高斯模糊的实现和可选区域的模糊[美图秀秀-背景虚化] 高斯模糊的原理中,它是根据高斯曲线调节像素色 ...
- 一、基于Qt的图像矩形区域改色
Qt环境下图像的打开和涂色 一.设计目标 能够在 Qt QtCreator 环境下打开常用图像格式文件,诸如 bmp.jpg.png 图像等,然后将他们转化为 Qt 中的 QImage 类,并进行矩形 ...
- 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。
laviewpbt 2014.8.4 编辑 Email:laviewpbt@sina.com QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
随机推荐
- rsync 使用小记
工作中遇到了有关rsync使用的问题,在这里记录下供有同样需求的人参考一下 先说下环境 服务端配置 pid file = /rsyncdata/rsyncd.pid port = 873 addres ...
- JAVA与VB通过SOCKET通讯
JAVA与VB通过SOCKET通讯 在做项目的过程中,本来是想使用JAVA的comm.jar工具实现串口通讯,不知道怎么回事,总是取不到电脑的串口.所以,改为现在的这种模式:java通过socket给 ...
- bzoj 合集 1079 1791 1876 2208 2306
1079 记忆化瞎搞吧,[a][b][c][d][e][l]表示当前有能涂1次的油漆a个,能涂2次的b个….前一个颜色为l,再搞下转移就行了. 1791 基环树上找直径 1876 高精度 2208 看 ...
- envsetup.sh 与 choosecombo
choose: 来定义编译选项, choosecombo 将会一步一步提示你输入相应的编译参数 https://blog.csdn.net/kickxxx/article/details/692518 ...
- nodeJS学习(11)--- nodeJS 取参 -- req.body & req.query & req.params
参考:https://my.oschina.net/u/2519530/blog/535309 获取请求中的参数是每个web后台处理的必经之路,nodejs的 express框架 提供了四种方法来实现 ...
- webpack+babel+ES6+react环境搭建
webpack+babel+ES6+react环境搭建 步骤: 1 创建项目结构 注意: 先创建一个项目目录 react 这个名字自定义,然后进入到这个目录下面 mkdir app //创建app ...
- O(1)gcd学习笔记
设最大权值为\(M\) \(T=\sqrt M\) 定理 任意一个\(\le M\)的数一定可以表示为abc三个数的乘积 满足这三个数要么\(\le T\),要么是一个质数 证明: 考虑反证 假设\( ...
- pat 团体天梯赛 L2-002. 链表去重
L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...
- 洛谷 [P1608] 最短路计数
最短路计数模版 本题要注意重边的处理 #include <iostream> #include <cstdio> #include <algorithm> #inc ...
- 【Chrome】Octotree Chrome插件离线安装
插件下载地址:http://www.cnplugins.com/devtool/octotree/download.html Octotree 是国外程序员Buu Nguyen 做的一个 Chrome ...
Accepted