c语言.下面程序各个变量是什么意思?假设以二维数组 G[m][n](m,n均小于20)表示一幅图像各像素的颜色,则G[i][j]表示区域中点(i,j)处的颜色,颜色值为 0 到 k 的整数.设计函数void ChangeColor(int G[][20],in

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 02:21:58

c语言.下面程序各个变量是什么意思?假设以二维数组 G[m][n](m,n均小于20)表示一幅图像各像素的颜色,则G[i][j]表示区域中点(i,j)处的颜色,颜色值为 0 到 k 的整数.设计函数void ChangeColor(int G[][20],in
c语言.下面程序各个变量是什么意思?
假设以二维数组 G[m][n](m,n均小于20)表示一幅图像各像素的颜色,则G[i][j]表示区域中点(i,j)处的颜色,颜色值为 0 到 k 的整数.
设计函数void ChangeColor(int G[][20],int m,int n,int i0,int j0,int NewColor),该函数的功能是:将指定点(i0,j0)所在的同色邻接区域(所有与点(i0,j0)同色的上、下、左、右可连通的点组成同色邻接区域)的颜色置换为给定的颜色值NewColor.
void ChangeColor(int G[][20],int m,int n,int i0,int j0,int NewColor)
{
int top=0,tx,ty,oldcolor=G[i0][j0];
struct point{int x,y;} stack[400],temp;
if(G[i0][j0]==NewColor) return;
temp.x=i0;
temp.y=j0;
stack[0]=temp;
top++;
while(top)
{
top--;
tx=stack[top].x; ty=stack[top].y;
G[tx][ty]=NewColor;
if(tx-1>=0&&G[tx-1][ty]==oldcolor)
{ temp.x=tx-1; temp.y=ty; stack[top]=temp; top++;}
if(tx+1=0&&G[tx][ty-1]==oldcolor)
{ temp.x=tx; temp.y=ty-1; stack[top]=temp; top++;}
if(ty+1

c语言.下面程序各个变量是什么意思?假设以二维数组 G[m][n](m,n均小于20)表示一幅图像各像素的颜色,则G[i][j]表示区域中点(i,j)处的颜色,颜色值为 0 到 k 的整数.设计函数void ChangeColor(int G[][20],in
为了方便理解题目,就举个简单的例子:
二维数组 G[3][5] ={ {0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0}
}
这里有一个图像,当时要给该图像添加颜色,要通过坐标表示图像的位置,并给对应坐标位置添加颜色,要添加什么颜色,就根据坐标值判断,比如红色表示值为1,黄色表示值为2,0表示白色
例如 G[3][5] 表示图像的长为3,宽为5; 被图像某个坐标(1,2)位置添加颜色,要添加红色就这样表示G[1][2]=1;
如何理解同时邻接区域?
比如:G[3][5] = {
{1,1,2,2,0}.,
{1,2,2,0,1},
{2,1,1,0,0}
}
首先我要修改坐标(0,0)颜色表示为黄色会得到结果是
2,2,2,2,0
2,2,2,0,1
2,1,1,0,0
接着我要把坐标位置(0,2)位置修改为红色,得到的结果:
1,1,1,1,0
1,1,1,0,1
1,1,1,0,0
可以这样理解 同色邻接区域
算法实现是:
while(top)
{
top--;
tx=stack[top].x; ty=stack[top].y;
G[tx][ty]=NewColor;
if(tx-1>=0&&G[tx-1][ty]==oldcolor)
{ temp.x=tx-1; temp.y=ty; stack[top]=temp; top++;}
if(tx+1=0&&G[tx][ty-1]==oldcolor)
{ temp.x=tx; temp.y=ty-1; stack[top]=temp; top++;}
if(ty+1