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 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
 
随机推荐
- Solr linux安装
			
1.下载安装(自行官网下载) 2.解压安装包 3.进入解压后的bin目录执行命令: ./solr start 出现如下警告: 根据提示修改solr.in.sh中的SOLR_ULIMIT_CHECKS属 ...
 - HDU——2089 不要62
			
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
 - Java EE 学习(2):使用  IDEA 开发 最简java web
			
参考:http://www.cnblogs.com/carsonzhu/p/5468223.html 使用IntelliJ IDEA开发java web 前言:由于本人以前简略的学习过 java 语言 ...
 - 关于Struts2中param的作用
			
1.页面传参与配置传参的区别: 如果页面Form表单的参数在Action类中有相应的setter方法,则会优先取页面Form表单传过来的值,如果页面没有该属性同名的参数,则会从配置文件中取同名的参数值 ...
 - 享元模式FlyweightPattern(转)
			
解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象.比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象 ...
 - LeetCode OJ-- Balanced Binary Tree ***
			
https://oj.leetcode.com/problems/balanced-binary-tree/ 判断一个二叉树,是否为平衡的.如果是平衡的,则它的每个子树的左右子树高度差不大于1. 递归 ...
 - Cryptography I 学习笔记 --- 使用分组密码
			
1. 如果加密算法是确定性的(相同的明文产生相同的密文),那么它对于选择明文攻击是不安全的 2. 随机化加密,每次对相同的密文加密,会产生不同的结果 AES加密模式 ecb:明文分块计算,块与块之间没 ...
 - python对象的复制问题,按值传递?引用传递?
			
这部分这篇博文说的很明白,转了过来 作者:winterTTr (转载请注明)http://blog.csdn.net/winterttr/article/details/2590741#0-tsina ...
 - 洛谷——P2626 斐波那契数列(升级版)
			
P2626 斐波那契数列(升级版) 题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ ...
 - 10.1综合强化刷题 Day2
			
a[问题描述]你是能看到第一题的 friends呢. —— hja世界上没有什么比卖的这 贵弹丸三还令人绝 ...
 
			
		
Accepted