2014-12-05 48 views
-2

我有一個任務,但我不知道如何開始。如果有人知道,請給我鏈接到一些職位。 我有一個最小的Java類,在這裏我需要更新「補」的方法,這樣它的工作原理,根據下面的描述:如何啓動桶填充算法

假裝你是在MS工作的塗料,或類似的圖形應用程序。你的工作是實施剷鬥填充工具。更具體地說,給定一個二維網格,用戶點擊的(X,Y)位置和一個顏色,設計一個算法,可以用來填充網格的相應部分。

桶填充算法應該「繪製」連接到用戶單擊的像素的所有像素,一直到顏色更改的邊界。因此,例如,如果用戶點擊白色像素並指定綠色,則剷鬥填充工具將所有觸摸的白色像素變爲綠色像素。但是,它不會影響位於圖像完全獨立部分的白色像素。

一個最小的Java類:

class BucketFill { 

    private char[][] pixels; 

    public BucketFill(char[][] pixels) { 
     this.pixels = pixels; 
    } 

    public void fill(int x, int y, char color) { 
     // TODO: make this method work 
    } 

    public void inspect() { 
     for (int y = 0; y < pixels.length; y++) { 
      for (int x = 0; x < pixels[y].length; x++) { 
       System.out.print(pixels[y][x]); 
      } 
      System.out.print("\n"); 
     } 
    } 

    public static void main(String argv[]) { 
     char pixels[][] = 
     { 
      { 'O', 'X', 'X', 'X', 'X' }, 
      { 'X', 'O', 'O', 'O', 'X' }, 
      { 'X', 'O', '#', 'O', 'X' }, 
      { 'X', 'O', 'O', 'O', 'X' }, 
      { 'X', 'X', 'X', 'X', 'X' }, 
      { 'X', 'X', 'X', '#', '#' }, 
      { 'X', 'X', 'X', 'X', 'X' } 
     }; 
     BucketFill bucketFill = new BucketFill(pixels); 
     bucketFill.fill(0, 0, '*'); 
     bucketFill.fill(3, 0, 'O'); 
     bucketFill.fill(2, 1, '@'); 
     bucketFill.inspect(); 
    } 
} 
+3

首先,我不得不說,你需要一個更好的標題爲您的問題。另外,請出示你自己的作品,你做了什麼?你的想法是什麼?即使這個想法是愚蠢的,沒有人關心。只要你努力嘗試自己解決問題。回到問題,請嘗試谷歌「洪水填充」。它只需要你5分鐘。 – 2014-12-05 15:02:08

+0

你可以從[這裏]開始(http://docs.oracle.com/javase/tutorial/)。接下來的步驟是把任何代碼**顯示出你已經嘗試過。那麼,我們可以幫助! :) – cno 2014-12-05 15:04:52

+0

嘗試解決問題,至少。填寫一個單一的元素並不難,你甚至沒有證明這一點。 – Compass 2014-12-05 15:06:51

回答

3

你可以用顏色填充算法。 Flood Fill

您可以使用基於堆棧的遞歸來實現它。它只是遞歸着色連接的節點。

+0

非常感謝。 – rel1x 2014-12-05 15:16:56