Miklix

Generator labiryntów algorytmów Ellera

Opublikowano: 16 lutego 2025 20:00:31 UTC

Generator labiryntu wykorzystujący algorytm Ellera do tworzenia idealnego labiryntu. Ten algorytm jest interesujący, ponieważ wymaga przechowywania w pamięci tylko bieżącego wiersza (nie całego labiryntu), więc można go używać do tworzenia bardzo, bardzo dużych labiryntów nawet w bardzo ograniczonych systemach.

Ta strona została przetłumaczona maszynowo z języka angielskiego, aby była dostępna dla jak największej liczby osób. Niestety, tłumaczenie maszynowe nie jest jeszcze dopracowaną technologią, więc mogą wystąpić błędy. Jeśli wolisz, możesz wyświetlić oryginalną angielską wersję tutaj:

Eller's Algorithm Maze Generator

Algorytm Ellera to algorytm generowania labiryntów, który wydajnie generuje idealne labirynty (labirynty bez pętli i z pojedynczą ścieżką między dwoma dowolnymi punktami) przy użyciu podejścia wiersz po wierszu. Tworzy labirynty podobne do algorytmu Kruskala, ale robi to, generując tylko jeden wiersz na raz, bez potrzeby przechowywania całego labiryntu w pamięci. Dzięki temu jest przydatny do generowania bardzo dużych labiryntów w bardzo ograniczonych systemach i do proceduralnego generowania treści.

Idealny labirynt to labirynt, w którym istnieje dokładnie jedna ścieżka z dowolnego punktu w labiryncie do dowolnego innego punktu. Oznacza to, że nie można kręcić się w kółko, ale często napotyka się ślepe zaułki, które zmuszają do zawrócenia.

Wygenerowane tutaj mapy labiryntu zawierają domyślną wersję bez pozycji początkowej i końcowej, więc możesz sam o tym zdecydować: będzie rozwiązanie z dowolnego punktu w labiryncie do dowolnego innego punktu. Jeśli chcesz się zainspirować, możesz włączyć sugerowaną pozycję początkową i końcową - a nawet zobaczyć rozwiązanie między nimi.


Generowanie nowego labiryntu








O algorytmie Ellera

Algorytm Ellera został wprowadzony przez Davida Ellera.

Algorytm ten wyróżnia się wydajnym podejściem wiersz po wierszu do generowania labiryntów, co czyni go idealnym do nieskończonych labiryntów lub labiryntów generowanych w czasie rzeczywistym. Jest on często cytowany w literaturze na temat proceduralnego generowania treści i generowania labiryntów, ale nie udało mi się znaleźć źródeł pierwotnych szczegółowo opisujących jego oryginalną publikację.

Jak działa algorytm Ellera w generowaniu labiryntów

Algorytm Ellera przetwarza jeden wiersz na raz, utrzymując i modyfikując zestawy połączonych komórek. Zapewnia łączność, unikając pętli i skutecznie rozszerza labirynt w dół.

Teoretycznie można go używać do generowania nieskończonych labiryntów, jednak aby mieć pewność, że wygenerowany labirynt będzie rzeczywiście rozwiązywalny, w pewnym momencie konieczne jest przełączenie się na logikę „ostatniego wiersza”, aby dokończyć labirynt.

Krok 1: Zainicjuj pierwszy wiersz

  • Przypisz każdej komórce w wierszu unikalny identyfikator zestawu.

Krok 2: Połącz sąsiadujące komórki poziomo

  • Losowo scal sąsiadujące komórki, ustawiając je na ten sam identyfikator zestawu. Zapewnia to, że istnieją poziome przejścia.

Krok 3: Utwórz połączenia pionowe z następnym rzędem

  • W każdym zestawie pojawiającym się w rzędzie co najmniej jedna komórka musi być połączona w dół (aby zapewnić łączność).
  • Wybierz losowo jedną lub więcej komórek z każdego zestawu, aby połączyć je z następnym wierszem.

Krok 4: Przejdź do następnego wiersza

  • Kontynuuj połączenia pionowe, przypisując ten sam identyfikator zestawu do odpowiednich komórek poniżej.
  • Przypisz nowe identyfikatory zestawów do wszystkich nieprzypisanych komórek.

Krok 5: Powtarzaj kroki 2–4, aż dotrzesz do ostatniego rzędu

  • Kontynuuj przetwarzanie wiersz po wierszu.

Krok 6: Przetwórz ostatni rząd

  • Upewnij się, że wszystkie komórki w ostatnim wierszu należą do tego samego zestawu, łącząc wszystkie pozostałe oddzielne zestawy.

Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Bang Christensen

O autorze

Mikkel Bang Christensen
Mikkel jest twórcą i właścicielem miklix.com. Ma ponad 20-letnie doświadczenie jako profesjonalny programista komputerowy / programista oprogramowania i jest obecnie zatrudniony na pełny etat w dużej europejskiej korporacji IT. Kiedy nie bloguje, poświęca swój wolny czas na szeroki wachlarz zainteresowań, hobby i aktywności, co może w pewnym stopniu znaleźć odzwierciedlenie w różnorodności tematów poruszanych na tej stronie.