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)">图像实用区域 |
![]() |
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 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
随机推荐
- Unity 脚本<1>
RaycastHit2D hit = Physics2D.Linecast(targetPosition, targetPosition + new Vector2(x, y)); 猜测是lineca ...
- ci日志记录
log_message($level, $message) 参数: $level (string) -- Log level: 'error', 'debug' or 'info' $message ...
- POJ 1941 The Sierpinski Fractal ——模拟
只需要开一个数组,记录一下这个图形. 通过一番计算,发现最大的面积大约是2k*2k的 然后递归下去染三角形. 需要计算出左上角的坐标. 然后输出的时候需要记录一下每一行最远延伸的地方,防止行末空格过多 ...
- FZU 2041 二分枚举
思路:先O(n)预处理出ri[i][j],le[i][j],分别表示第i个位置向右边移动出j个空格需要的步数,表示第i个位置向左边移动出j个空格需要的步数. 然后枚举间隙处,二分判段最大间隔. #in ...
- 查找String中出现最多字符的次数和个数
Sting 的charAt方法返回相应位置的字符,使用该方法遍历String,将每个字符存入对象属性,遍历属性得到最多字符个数 <!DOCTYPE html> <html> & ...
- JavaScript (JS)基础:BOM 浅析 (含window对象相关基本方法、属性解析)
① window对象(Math方法也属于window对象): window对象是JavaScript中的顶级对象,所有定义在全局作用域中的变量.函数都会变成window对象的属性和方法,window对 ...
- Docker学习之Docker Registry
前言 前面已经学习了怎样通过Dockerfile来构建我们自己的镜像了,但是一个系统可能包含着很多个微服务即有很多个镜像,当镜像越来越多的时候,就必须得有一个地方来管理这些镜像,Docker官方提供了 ...
- 代码怎样重构<1>
原文发布时间为:2011-05-24 -- 来源于本人的百度文章 [由搬家工具导入]
- SQL语句效率问题的几点总结
原文发布时间为:2009-10-29 -- 来源于本人的百度文章 [由搬家工具导入] 1. SQL优化的原则是: 将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。 调 ...
- linux的进程管理
进程就是正在运行的程序. 一个程序可以对应多个进程,但是一个进程只对应一个程序. 1.进程和进程控制的概念 查看进程状态: w+用户名 查看个别用户的进程 ps -aux 显示系统进程 a:代表 ...