algorytm flood fill
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

algorytm flood fill

AutorWiadomość
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
» 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
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
» 2019-05-08 21:25:01
A jak inaczej chcesz usunąć element ze stosu?
P-174602
Temat założony przez niniejszego użytkownika
» 2019-05-08 22:09:45
a po co zdejmuje ten punkt ?
P-174603
» 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