/**
* 功能:實現許多圖片編輯軟件都支持的「填充顏色」功能。
* 給定一個屏幕(以二維數組表示,元素爲顏色值)、一個點和一個新的顏色值,將新顏色填入這個店的周圍區域,知道原來的顏色值全都改變。java
*/數組
- /**
- * 思路:假設要對一個像素(好比紅色)調用paintFill,即對周圍的像素逐一調用paintFill,
- * 向外擴張,一旦碰到非紅色的像素就中止填充。
- *
- * 注意:碰到圖像問題,要注意screen[y][x]中x和y的順序。x表示水平軸(即自左向右),實際上對應於列數,而非行數。y的值等於行數。
- * @param screen
- * @param x
- * @param y
- * @param ncolor
- * @return
- */
- public static boolean paintFill(Color[][] screen,int x,int y,Color ncolor){
- if(screen[y][x]==ncolor)
- return false;
- return paintFill(screen, x, y, screen[y][x], ncolor);
- }
-
- public static boolean paintFill(Color[][] screen,int x,int y,Color ocolor,Color ncolor){
- if(x<0||x>=screen[0].length||y<0||y>=screen.length)
- return false;
-
- if(screen[y][x]==ocolor){
- screen[y][x]=ncolor;
- paintFill(screen, x-1, y, ocolor, ncolor);//左
- paintFill(screen, x+1, y, ocolor, ncolor);//右
- paintFill(screen, x, y-1, ocolor, ncolor);//上!!!
- paintFill(screen, x, y+1, ocolor, ncolor);//下!!!
- }
- return true;
- }
[java] view plain copyapp
- enum Color{
- Black,White,Red,Yellow,Green
- }