Miklix

Генератор на лавиринт на алгоритам на Елер

Објавено: 5 март 2025, во 19:51:21 UTC

Генератор на лавиринт кој користи алгоритам на Елер за да создаде совршен лавиринт. Овој алгоритам е интересен бидејќи бара само чување на тековниот ред (не целиот лавиринт) во меморијата, така што може да се користи за создавање многу, многу големи лавиринти дури и на многу ограничени системи.

Оваа страница беше машински преведена од англиски за да биде достапна за што повеќе луѓе. За жал, машинското преведување сè уште не е усовршена технологија, така што може да се појават грешки. Ако сакате, можете да ја видите оригиналната англиска верзија овде:

Eller's Algorithm Maze Generator

Елеровиот алгоритам е алгоритам за генерирање на лавиринт кој ефикасно произведува совршени лавиринти (лавиринти без јамки и единствена патека помеѓу кои било две точки) користејќи пристап ред до ред. Тој произведува лавиринти слични на алгоритмот на Крускал, но тоа го прави со генерирање само еден ред во исто време, без потреба од складирање на целиот лавиринт во меморија. Тоа го прави корисен за генерирање на многу големи лавиринти на многу ограничени системи и за процедурално генерирање содржина.

Совршен лавиринт е лавиринт во кој има точно една патека од која било точка во лавиринтот до која било друга точка. Тоа значи дека не можете да завршите да одите наоколу во кругови, но често ќе наидете на ќорсокак, што ќе ве принуди да се свртите и да се вратите назад.

Мапите на лавиринтот генерирани овде вклучуваат стандардна верзија без никакви позиции за почеток и крај, така што можете сами да ги решите тие: ќе има решение од која било точка во лавиринтот до која било друга точка. Ако сакате инспирација, можете да овозможите предложена почетна и завршна позиција - па дури и да го видите решението помеѓу двете.


Создадете нов лавиринт








За Елеровиот алгоритам

Алгоритмот на Елер беше воведен од Дејвид Елер.

Алгоритмот е забележлив по неговиот ефикасен пристап ред по ред за генерирање на лавиринт, што го прави идеален за бесконечни лавиринти или лавиринти генерирани во реално време. Најчесто се цитира во литературата за генерирање на процедурални содржини и лавиринт, но не успеав да најдам примарни извори со детали за нејзината оригинална публикација.

Како функционира алгоритмот на Елер за генерација на лавиринт

Алгоритмот на Елер обработува еден ред во исто време, одржувајќи и менувајќи множества поврзани ќелии. Обезбедува поврзување притоа избегнувајќи јамки и ефикасно го продолжува лавиринтот надолу.

Теоретски може да се користи за да се генерираат бесконечни лавиринти, но за да се осигура дека генерираниот лавиринт е навистина решлив, неопходно е во одреден момент да се префрли на логиката „завршен ред“ за да се заврши лавиринтот.

Чекор 1: Иницијализирајте го првиот ред

  • На секоја ќелија во редот назначете уникатен ID на множество.

Чекор 2: Хоризонтално приклучете се на некои соседни ќелии

  • Случајно спојувајте ги соседните ќелии со нивно поставување на истиот ID на множество. Ова осигурува дека има хоризонтални премини.

Чекор 3: Создадете вертикални врски до следниот ред

  • За секој сет што се појавува во редот, најмалку една ќелија мора да се поврзе надолу (за да се обезбеди поврзување).
  • Случајно изберете една или повеќе ќелии од секој сет за да се поврзете со следниот ред.

Чекор 4: Преместете се на следниот ред

  • Пренесете ги напред вертикалните врски со доделување на истиот сет ID на соодветните ќелии подолу.
  • Доделете нови идентификатори за множество на кои било неподелени ќелии.

Чекор 5: Повторете ги чекорите 2-4 додека не се достигне последниот ред

  • Продолжете со обработката ред по ред.

Чекор 6: Обработете го последниот ред

  • Осигурете се дека сите ќелии во последниот ред припаѓаат на истото множество со спојување на сите преостанати посебни множества.

Споделете на BlueskyСподелете на ФејсбукСподелете на LinkedInСподелете на TumblrСподелете на XСподелете на LinkedInЗакачи на Pinterest

Микел Банг Кристенсен

За авторот

Микел Банг Кристенсен
Микел е креатор и сопственик на miklix.com. Тој има над 20 години искуство како професионален компјутерски програмер/развивач на софтвер и моментално е вработен со полно работно време во голема европска ИТ корпорација. Кога не пишува блог, тој го поминува своето слободно време на широк спектар на интереси, хоби и активности, кои до одреден степен може да се рефлектираат во разновидните теми опфатени на оваа веб-локација.