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 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
随机推荐
- docker log 批量删除报错: find: `/var/lib/docker/containers/': 没有那个文件或目录
问题描述: 服务器上面docker log太多,打算用之前写的批量清理shell脚本清理掉,但是发现报错. find: `/var/lib/docker/containers/': 没有那个文件或目录 ...
- MFC编程入门之二十八(常用控件:列表视图控件List Control上)
前面一节中,讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符 ...
- arp_ignore和arp_announce内核参数
arp_announce : INTEGER 对网络接口上本地IP地址发出的ARP报文作出相应级别的限制. 0:本机所有IP地址都向任何一个接口通告ARP报文. 1:尽量仅向该网卡回应与该网段匹配的A ...
- MySql数据类型和Java数据类型对应一览
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
- vuemock数据
http://www.jianshu.com/p/ccd53488a61b dev.server.js 61 行 app.use('/mock',express.static('./mock'))
- 上传相同文件名的时候不能触发change事件的解决方案
方法一 在上传完文件之后,将<input type="file" /> 的值置为null,即可. 方法二 在上传完文件之后替换dom 方法三 在上传完文件之后刷新页面
- Use ASP.NET and DotNetZip to Create and Extract ZIP Files
原文发布时间为:2011-02-16 -- 来源于本人的百度文章 [由搬家工具导入] Published: 11 Feb 2011By: Scott MitchellDownload Sample C ...
- DataBinder.Eval值的判断
原文发布时间为:2009-04-10 -- 来源于本人的百度文章 [由搬家工具导入] 问:如何对<%# DataBinder.Eval(Container.DataItem,"Ly_R ...
- [LeetCode] Remove Duplicates from Sorted List II 链表
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- python3.5爬虫框架Scrapy的安装和排错(windows环境)
本文记录win7系统下使用python3.5安装Scrapy爬虫框架. Scrapy框架目前的官方文档说明是还不支持windows的python3环境的,但是网友反映以及实际测试均可以使用,下面就进行 ...
Accepted