|
Będzie nas interesowało błądzenie losowe przy 4 kierunkach ruchu "bez powtórzeń" (patrz rys. obok).
Rygorystycznie założymy, że:
1° nie można wylosować miejsca,
na którym było się w dowolnym z poprzednich ruchów.
2° Będziemy wędrowali dotąd, "dopóki jest to możliwe".
3° Mamy obowiązek wrócić do punktu startowego
|
W rozwiązaniu można zastosować listę jednokierunkową (stos)z zapisem elementu "na początku" i odczytem "od początku".
Taka struktura pozwoli na
1° sprawdzanie czy byliśmy już w danym punkcie
2° zrealizować powrót zdejmując ze stosu kolejne notatki
|
Postulat wędrówki "dopóki jest to możliwe" można zrealizować przy pomocy listy typu zbiór i metody należy klasy lista (zobacz rozdział Trochę teorii).
Algorytm ogólny może wyglądać tak →(patrz ramka) .
Język i szczegóły techniczne to już rzecz gustu i upodobania. Na pewno ćwiczenie ciekawe i dające sporo satysfakcji, mimo że wygląda na łatwe.
Wnioski:
- Średnia ilość kroków stabilizuje się na liczbie (59,62)
zobacz →zielony wykres
- Uzyskana droga nie jest oczywiście optymalna np najdłuższa
- Średnia odległość od punktu startowego stabilizuje się na liczbie, która jest pierwiastkiem ze
średniej il.kroków ( u nas (√59 , √62) ) co w praktyce daje ≈8 →wykres niebieski
|
while(jest droga)
{
wyzeruj zbior;
while(jest droga lub możliwe inne kier.)
{
while(brak w zbiorze)
{
kierunek=losowa(4);
}
zapisz_w_zbiorze(los);
kierunek==0: jeśli(wolna(x,y+1)) y++;
kierunek==1: jeśli(wolna(x,y-1)) y--;
kierunek==2: jeśli(wolna(x+1,y)) x++;
kierunek==3: jeśli(wolna(x-1,y)) x--;
}
zapamietaj(x,y);
idz_do(x,y);
}
|
|