CCI 9.7 矩阵填充颜色

编写函数,实现许多图片编辑软件都支持的“填充颜色”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,知道原来的颜色值全部改变。

分析:

这道题意思有些不清楚,看书后答案应该如下图所示。

原来矩阵:

CCI 9.7 矩阵填充颜色_第1张图片

染色后矩阵

CCI 9.7 矩阵填充颜色_第2张图片

即与选中点相连的且颜色相同的点被染成新的颜色。

package cci;

public class CCI_9_7 {
	
	public enum Color{PINK, ORANGE, GREEN}
	
	public static void fillColor(Color[][] mat, int row, int col, Color newColor){
		if(mat[row][col]==newColor)
			return;
		fillColor(mat, row, col, mat[row][col], newColor);
	}
	
	public static void fillColor(Color[][] mat, int row, int col, Color oldColor, Color newColor){
		if(row<0 || row>mat.length-1 || col<0 || col>mat[0].length)
			return;
		if(mat[row][col]==oldColor){
			mat[row][col]=newColor;
			//左
			fillColor(mat, row, col-1, oldColor, newColor);
			//右
			fillColor(mat, row, col+1, oldColor, newColor);
			//上
			fillColor(mat, row-1, col, oldColor, newColor);
			//下
			fillColor(mat, row+1, col, oldColor, newColor);
		}
	}

	public static void main(String[] args) {
		Color[][] mat = { {Color.GREEN, Color.GREEN, Color.GREEN, Color.PINK,  Color.GREEN},
						  {Color.GREEN, Color.PINK,  Color.GREEN, Color.GREEN, Color.GREEN},
						  {Color.GREEN, Color.PINK,  Color.PINK,  Color.PINK,  Color.GREEN},
						  {Color.GREEN, Color.GREEN, Color.PINK,  Color.GREEN, Color.GREEN},
						  {Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.PINK }
						};
		fillColor(mat, 1, 1, Color.ORANGE);
		for(int i=0; i<mat.length; i++){
			for(int j=0; j<mat[0].length; j++){
				System.out.print(mat[i][j]+" ");
			}
			System.out.println();
		}
	}

}




你可能感兴趣的:(递归)