题库 题库

【简答题】

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

相关试题