广工数据结构第五单元

【题目】假设以二维数组g[1…m][1…n]表示一个图像
区域,g[i][j]表示该区域中点(i,j)所具颜色,其值
为从0到k的整数。试编写递归算法,将点(i0,j0)所在
区域的颜色置换为颜色c。约定与(i0,j0)同色的上、
下、左、右的邻接点为同色区域的点。

表示图像区域的类型定义如下:
typedef char GTYPE[m+1][n+1];

实现下列函数:
void ChangeColor(GTYPE g, int m, int n,
char c, int i0, int j0);
/* 在g[1…m][1…n]中,将元素g[i0][j0] /
/
所在的同色区域的颜色置换为颜色c */

递归算法主要是在理解递归边界(以及去重),读者可以通过汉诺塔问题加深该认识;
答案仅供参考:

void ChangeColor(GTYPE g, int m, int n, 
                 char c, int i0, int j0) {
  //简单的错误检查
  if(m<0||n<0||i0<1||j0<1||g[i0][j0]==c) {
    
  } else {
    char swap = g[i0][j0];
    g[i0][j0] = c;
    //上左右下递归修改,当然也可以上下左右位置互换
    if(i0>1&&g[i0-1][j0]==swap) {
      ChangeColor(g,m,n,c,i0-1,j0);
    }
    if(j0>1&&g[i0][j0-1]==swap) {
      ChangeColor(g,m,n,c,i0,j0-1);
    }
    if(j0

你可能感兴趣的:(GDUT,算法,数据结构,c语言,递归算法)