在一定大小的像素图像中,将同色区域的颜色值替换为其他颜色值,从而产生新的图像,输入数据,图像大小,指定的像素点坐标,要替换成的颜色。

一开始出队操作写错了折腾半天,当队列中只有一个元素是出队后要将队首指针指向队尾指针。

取定初始位置的坐标后,在此位置上下左右搜索,将满足要求的位置入队,然后经过此一层循环后,取出队首元素,替换颜色,然后再根据该点上下左右搜索。

 #include <iostream>
#include <cstdlib>
using namespace std;
struct point
{
int x;
int y;
};
struct squeue
{
point data;
squeue *next;
};
struct sq
{
squeue *front;
squeue *rear;
}; //坐标
void initqueue(sq *s) /*队列初始化*/
{
squeue *q;
q=new squeue; /*设定队列头部*/
s->front=q;
s->rear=q;
q->next=NULL;
}
int isempty(sq *s)
{
if(s->front==s->rear)
return ;
return ;
}
int enqueue(sq *s,point e)
{
squeue *q;
q=new squeue;
q->data=e;
q->next=NULL;
s->rear->next=q;
s->rear=q;
}
int ouqueue(sq *s,point &e)
{
if(isempty(s))
return ;
else
{
squeue* p=(s->front)->next;
e=p->data;
s->front->next=p->next;
if(s->rear==p) //当要删除的是队尾元素时,要将队尾指针指向队首指针
s->rear=s->front;
free(p);
return ;
}
}
void pixel_transform(int a[][],int m,int n,int x0,int y0,int newcolor)
{
sq s;
initqueue(&s);
point q,temp;
int c=a[x0][y0]; /*取出旧的颜色*/
q.x=x0,q.y=y0;
enqueue(&s,q);
while(isempty(&s)==)
{
ouqueue(&s,temp);
q=temp;
a[q.x][q.y]=newcolor;
if(q.x->=&&a[q.x-][q.y]==c)
{
temp.x=q.x-;
temp.y=q.y;
enqueue(&s,temp);
}
if(q.x+<=m-&&a[q.x+][q.y]==c)
{
temp.x=q.x+;
temp.y=q.y;
enqueue(&s,temp);
}
if(q.y->=&&a[q.x][q.y-]==c)
{
temp.x=q.x;
temp.y=q.y-;
enqueue(&s,temp);
}
if(q.y+<=n-&&a[q.x][q.y+]==c)
{
temp.x=q.x;
temp.y=q.y+;
enqueue(&s,temp);
}
}
}
int main()
{
int i,j;
int a[][]={
,,,,,
,,,,,
,,,,,
,,,,,
,,,,
};
pixel_transform(a,,,,,);
for(i=;i<;i++)
{
for(j=;j<;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return ;
}

像素转换问题-队列解决办法(或者dfs)的更多相关文章

  1. ie63像素bug原因及解决办法不使用hack

    1.浮动元素后边跟不浮动元素时会产生3像素bug 2.解决办法是不要忘记给浮动元素的相邻元素加上浮动.

  2. BeanUtils.populate()空字符串转换日期的解决办法

    我们在使用beanutils.populate()封装参数时,如果封装的字符串是空,在转换成date时会出现以上异常,此时可以在工具类中添加静态代码块即可解决:注意导入beanutils 包 impo ...

  3. div内的img下出现几像素的空白间距解决办法

    现象描述: 解决方法: 1.设父元素的font-size:0; 2.设img为display:block; 3.设img为vertical-align:middle;

  4. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  5. 安卓activity之间值共享解决办法,tabhost之间共享父类值,字符串类型的转换,获取每一个listview的item

    1.tabhost父类值共享的解决办法 dianzhanliebiao.java是传值页面,zhuyemian.java放的是tabhost,dianzhangaikuang.java是tabhost ...

  6. 无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换----解决办法

    例子:(报错了) public DateTime? time { get; set; } time = item.HospOutDate.HasValue ? DateTime.Parse(item. ...

  7. wordpress4.4+版本自动生成一个768w像素缩略图的解决办法

    4.4版本以后,wordpress增加了响应式图片的功能,目的是让图片能适应手机.平板等不同屏幕,但是我不想要这个功能,把缩略图大小全调成0,function.php里的相关函数全删除了, 上传图片还 ...

  8. 工作总结 无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable<T> (可空类型)

    可空值类型 备注     一种类型认为是可以为 null,如果它可以分配一个值,也可以分配null,这意味着类型具有无论如何没有值. 默认情况下,所有都引用类型,如String,是否可以为 null, ...

  9. .Net内存泄露原因及解决办法

    .Net内存泄露原因及解决办法 1.    什么是.Net内存泄露 (1).NET 应用程序中的内存 您大概已经知道,.NET 应用程序中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆.这里我们需 ...

随机推荐

  1. Pet(hdu 4707 BFS)

    Pet Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. ubuntu安装配置gradle

    在Ubuntu安装Gradle也是很简单.切记请勿使用apt-get安装Gradle.因为Ubuntu源的Gradle实在太旧.安装好基本不能用. 下面是安装步骤: 1.在官网下载最新的Gradle版 ...

  3. 你真的会玩SQL吗?Top和Apply

    原文:你真的会玩SQL吗?Top和Apply 本章预先想写一些Top和Apply基本的用法,但好像没什么意义,所以删掉了一些无用的东西,只留下几个示例,以保证系列的完整性. Top和Apply解决的常 ...

  4. error: ‘shared_ptr’ in namespace ‘std’ does not name a type

    用G++编译项目的时候发生标题上的错误,原因是,这是c++ 11标准的.在给g++传递命令行的时候加上-std=c++0x就行了. 还需要在源码中#include<memory> 我的cm ...

  5. JAVA的类加载器,详细解释

    JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader). 一. ClassLoader基本概念 1.ClassL ...

  6. 绘图工具graphviz学习使用

    画图工具: http://www.tuicool.com/articles/r2iAfa http://www.tuicool.com/articles/RjQfey 绘图工具graphviz学习使用 ...

  7. 开源欣赏wordpress之intall.php

    引导式安装 $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) ...

  8. 更新ORACLE数据时遇到锁死情况的处理

    我们在操作数据库的 时候,有时候会由于操作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以 ...

  9. 总结FormsAuthentication的使用

    一.先看一下使用FormsAuthentication做登录认证的用法 用法一: FormsAuthentication.SetAuthCookie(username, isPersistent); ...

  10. WINDOWS 下搭建 OC 集成开发环境

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...