Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

algorytm flood fill

Ostatnio zmodyfikowano 2019-05-08 22:17
Autor Wiadomość
robertos18
Temat założony przez niniejszego użytkownika
algorytm flood fill
» 2019-05-08 20:10:29
C/C++
void MyWindow::flood_fill( int x0, int y0, int zm_k, int nw_k ) {
    QStack < QPoint > q; // utworzenie stosu
    q.push( QPoint( x0, y0 ) ); // odlozenie na stos punktu x0,y0
    QPoint p;
   
    while( !q.isEmpty() ) { // dopoki stos nie pusty
        p = q.top();
        q.pop(); // zdjecie ze stosu
       
        x0 = p.x();
        y0 = p.y();
       
        if(( x0 >= 0 ) &&( y0 >= 0 ) &&( x0 < szer ) &&( y0 < wys ) ) // jesli kliknalem w okno to zamalowanie
        {
            if( kolor( x0, y0 ) == zm_k ) {
               
                ustaw_kolor( x0, y0, nw_k );
               
                q.push( QPoint( x0 - 1, y0 ) );
                q.push( QPoint( x0 + 1, y0 ) );
                q.push( QPoint( x0, y0 - 1 ) );
                q.push( QPoint( x0, y0 + 1 ) );
               
            } }
    }
}

Mam pytanie po co to zostalo stworzone? Dlaczego dodajemy nowe punkty do p a zdejmujemy punkty ze stosu ?
C/C++
p = q.top();
q.pop();

x0 = p.x();
y0 = p.y();
P-174599
DejaVu
» 2019-05-08 20:35:46
1. Dodajesz na stos punkt od którego chcesz zacząć zamalowywanie.
2. Chcesz zakończyć zamalowywanie, gdy na stosie nie ma więcej punktów do zamalowania.
3. Jeżeli aktualnie pobrany punkt ze stosu jest kolorem, który chcesz zamalować na nowy, to chcesz dodać do stosu wszystkie sąsiadujące punkty, że powinny być one odwiedzone w celu sprawdzenia czy należy je zamalować czy nie.
P-174600
robertos18
Temat założony przez niniejszego użytkownika
» 2019-05-08 20:59:28
dziękuje za odpowiedz, rozjasniło działanie algorytmu, ale wciaż nie rozumiem po co uzywamy pop ?
P-174601
pekfos
» 2019-05-08 21:25:01
A jak inaczej chcesz usunąć element ze stosu?
P-174602
robertos18
Temat założony przez niniejszego użytkownika
» 2019-05-08 22:09:45
a po co zdejmuje ten punkt ?
P-174603
pekfos
» 2019-05-08 22:17:19
Algorytm wykonuje się, aż stos będzie pusty, więc kiedyś przecież musi być pusty. Stos nie służy tu do testowania, czy punkt został już odwiedzony - tę rolę pełni zmiana koloru piksela. Stos trzyma informację o punktach do sprawdzenia - jeśli się wyczerpią, zadanie algorytmu jest wykonane. Ten algorytm to nic innego jak DFS, przestudiuj sobie klasykę.
P-174604
« 1 »
  Strona 1 z 1