编写函数,实现许多图片编辑软件都支持的“填充颜色”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,知道原来的颜色值全部改变。
分析:
这道题意思有些不清楚,看书后答案应该如下图所示。
原来矩阵:
染色后矩阵
即与选中点相连的且颜色相同的点被染成新的颜色。
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(); } } }