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

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

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

 #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 ;
}

最新文章

  1. Win8 Metro动态加载内容框架
  2. android第一行代码-2.activity基本用法
  3. c/c++ qsort 函数 结构体简单使用(1)
  4. JavaBean ,Enterprise Bean(EJB), 三种Bean, 以及POJO
  5. RN组件之Switch与Picker
  6. LeetCode题解——Longest Palindromic Substring
  7. 打造属于自己的Altium Designer 3D封装库,不需要懂专门的三维设计软件
  8. 传输层之TCP
  9. FileNameExtensionFilter文件过滤
  10. python 语句:条件、循环、break、continue...
  11. dulicate symbol for architecture i386 或者其他什么CPU架构 比如i386
  12. C# 使用 Lotus notes 公共邮箱发送邮件
  13. Jenkins构建Android项目持续集成之findbugs的使用
  14. centos7下git版本升级及gitlab安装
  15. PAT基础6-10
  16. Redis 入门 安装 命令
  17. 洛谷P3295 萌萌哒 [SCOI2016] 倍增+并查集
  18. Nginx技术研究系列6-配置详解
  19. 吴裕雄 python深度学习与实践(6)
  20. linux 新建用户和权限分配

热门文章

  1. [C++程序设计]函数模板
  2. js 对日期加减
  3. PHP内置函数getimagesize()的漏洞
  4. 前端上将字符串用语音读出来只能在IE上运行 其他不行 代码极少
  5. 玩sdr的朋友们,在rtl_tcp时,记得调整rtl_AGC和tuner_AGC啊
  6. hdu 1500 Chopsticks
  7. RegexOptions枚举
  8. man/ls/clock/date/echo笔记
  9. poj1080--Human Gene Functions(dp:LCS变形)
  10. OGG常见问题处理