package com.interview.books.ccinterview;
import com.interview.utils.ConsoleWriter;
import com.interview.utils.models.Point;
import java.util.LinkedList;
import java.util.Queue;
/**
* Created_By: stefanie
* Date: 14-12-13
* Time: 下午7:54
*/
public class CC20_PaintFill {
public void paint(int[][] matrix, int x, int y, int color){
if(matrix == null || matrix.length == 0) return;
if(!withinMatrix(matrix, x, y) || matrix[x][y] == color) return;
int originalColor = matrix[x][y];
Queue<Point> queue = new LinkedList();
queue.add(new Point(x, y));
while(!queue.isEmpty()){
Point point = queue.poll();
matrix[point.x][point.y] = color;
paintNeighbor(matrix, point.x + 1, point.y, originalColor, color, queue);
paintNeighbor(matrix, point.x - 1, point.y, originalColor, color, queue);
paintNeighbor(matrix, point.x, point.y + 1, originalColor, color, queue);
paintNeighbor(matrix, point.x, point.y - 1, originalColor, color, queue);
}
}
private void paintNeighbor(int[][] matrix, int x, int y, int original, int color, Queue<Point> queue){
if(withinMatrix(matrix, x, y) && matrix[x][y] == original) {
matrix[x][y] = color;
queue.add(new Point(x, y));
}
}
private boolean withinMatrix(int[][] matrix, int x, int y){
if(x >= 0 && x < matrix.length && y >= 0 && y < matrix[0].length) return true;
else return false;
}
public static void main(String[] args){
int[][] matrix = new int[][]{
{1,2,2,2,4,5,6},
{4,3,2,4,4,4,7},
{1,2,3,4,5,6,7}
};
CC20_PaintFill painter = new CC20_PaintFill();
painter.paint(matrix, 1, 3, 7);
ConsoleWriter.printIntArray(matrix);
}
}