2014-12-05 3 views
-2

У меня есть задача, но я не знаю, с чего начать. Если кто-то знает, пришлите мне ссылки на некоторые сообщения. У меня есть минимальный класс Java, где мне нужно обновить метод «заполнить», так что он работает в соответствии со следующим описанием:Как запустить алгоритм заполнения заполнителя

притворитесь, что вы работаете в MS Paint, или аналогичный графику приложения. Ваша задача - реализовать инструмент заполнения ковша. Более конкретно, учитывая двумерную сетку, позицию (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

Во-первых, я должен сказать, что вам нужен лучший заголовок для вашего вопроса. Также, пожалуйста, покажите свою СОБСТВЕННУЮ работу, что вы сделали? какая у тебя идея? Даже идея глупа, никто не заботится. Пока вы пытаетесь решить проблему самостоятельно. Вернемся к вопросу, попробуйте Google fill fill fill. Это займет у вас 5 минут. –

+0

Вы можете начать с [здесь] (http://docs.oracle.com/javase/tutorial/). Следующий шаг - поставить ** любой код **, показывающий, что вы пытались. Тогда мы можем помочь! :) – cno

+0

Попытаться решить проблему, по крайней мере. Заполнение одного элемента совсем не сложно, и вы даже этого не продемонстрировали. – Compass

ответ

3

Вы можете использовать Flood Fill алгоритм. Flood Fill

Вы можете реализовать его с помощью рекурсии на основе стека. Он просто рекурсивно окрашивает подключенные узлы.

+0

Большое вам спасибо. – rel1x

Смежные вопросы