阅读以下说明和算法,完善算法并回答问题。 【说明】 假设以二维数组G[1..m,1..n)表示一幅图像各像素的颜色,则G[i,j]表示区域中点(i,j)处的颜色,颜色值为0~k的整数。 下面的算法将指定点(i0,j0)所在的同色邻接区域的颜色置

admin2008-05-15  43

问题 阅读以下说明和算法,完善算法并回答问题。
【说明】
   假设以二维数组G[1..m,1..n)表示一幅图像各像素的颜色,则G[i,j]表示区域中点(i,j)处的颜色,颜色值为0~k的整数。
   下面的算法将指定点(i0,j0)所在的同色邻接区域的颜色置换为给定的颜色值。约定所有与点(i0,j0)同色的上、下、左、右可连通的点组成同色邻接区域。
   例如,一幅8×9像素的图像如图2-1所示。设用户指定点(3,5),其颜色值为0,此时其上方(2,5)、下方(4,5)、右方(3,6)邻接点的颜色值都为0,因此这些点属于点(3,5)所在的同色邻接区域,再从上、下、左、右四个方向进行扩展,可得出该同色邻接区域的其他点(见图2-1中的阴影部分)。将上述同色区域的颜色替换为颜色值7所得的新图像如图2-2所示。
  
【算法】
   输入:矩阵G,点的坐标(i0,j0),新颜色值newcolor。
   输出:点(i0,j0)所在同色邻接区域的颜色置换为newcolor之后的矩阵G。
   算法步骤(为规范算法,规定该算法只在第七步后结束)如下。
   第一步:若点(i0,j0)的颜色值与新颜色值newcolor相同,则(1);
   第二步:点(i0,j0)的颜色值→oldcolon创建栈S,并将点坐标(i0,j0)入栈;
   第三步;若(2),则转第七步;
   第四步;栈顶元素出栈→(x,y),并(3);
   第五步;1)若点(x,y-1)在图像中且G[x,y-1]等于oldcolor,则(x,y-1)入栈S;
           2)若点(x,y+1)在图像中且GIx,y+1]等于oldeolor,则(x,y+1)入栈S;
           3)若点(x-1,y)在图像中且G[x-1,y)等于oldcolor,则(x-1,y)入栈S;
           4)若点(x+1,y)在图像中且G[x+1,y)等于oldcolor,则(x+1,y)入栈S;
第六步:转(4);
第七步:算法结束。
【问题】
   是否可以将算法中的栈换成队列?回答;(5) 。

选项

答案(1)转第七步 (2)栈S空,或等价的文字描述 (3)G[x,y]←newcolor,或G[x,y]=newcolor,或等价的文字描述 (4)第三步 (5)可以

解析 本题考查栈结构在算法中的应用。
   栈或(和)队列常在某些应用中用来临时存储需要处理的元素,因此,其基本应用方式为:首先令一个(或多个)元素入栈(队列),然后在栈(队列)非空的情况下,栈顶(队头)元素出栈(队列)并进行处理,然后令与该栈顶(队头)元素相关的其他元素入栈(队列),再从判栈(队列)空开始重复以上过程。
   根据题目说明部分的描述,所有与点(i0,j0)同色的上、下、左、右可连通的点组成同色邻接区域。要置换一个同色邻接区域中所有点的颜色,可先将所有需要改变颜色的点的坐标记录下来,然后逐个地改变其颜色值;也可采取找出一个点、处理一个点的方式进行颜色置换。题中给出的算法属于后一种情况。
   显然,算法中需要一个存储空间,用于临时存储需要置换颜色的点的坐标,使每个需要处理的元素都进、出该存储区域一次,算法中的栈起的就是这个作用。实际上,对区域中各点的颜色置换的顺序是无关紧要的,因此,将算法中的栈换成队列不会影响算法的输出。
   在本题中,若新的颜色值与同色区域中的原颜色相同,则无需置换。因此空 (1)处应填入“转第七步”。算法第二步先记下点(i0,j0)所在区域的原颜色,并令点(i0,j0)入栈,之后就是基于栈非空的操作了,因此空(2)处应填入“栈S为空”。第三步令栈顶元素出栈并修改对应点的颜色值,空(3)处应填入“修改(x,y)处的颜色值为newcolor"。算法中必然有一步能使算法步骤循环处理,因此第六步中的空(4)处应填入“第三步”。
转载请注明原文地址:https://jikaoti.com/ti/nZW7FFFM
0

最新回复(0)