Miklix

Ellera algoritma labirinta ģenerators

Publicēts: 2025. gada 16. februāris 19:59:57 UTC

Labirints ģenerators, izmantojot Eller algoritmu, lai izveidotu perfektu labirintu. Šis algoritms ir interesants, jo tas prasa tikai pašreizējās rindas (nevis visu labirintu) saglabāšanu atmiņā, tāpēc to var izmantot, lai izveidotu ļoti, ļoti lielus labirintus pat ļoti ierobežotās sistēmās.

Šī lapa tika mašīntulkota no angļu valodas, lai padarītu to pieejamu pēc iespējas vairāk cilvēkiem. Diemžēl mašīntulkošana vēl nav pilnīga tehnoloģija, tāpēc tajā var rasties kļūdas. Ja vēlaties, oriģinālo versiju angļu valodā varat apskatīt šeit:

Eller's Algorithm Maze Generator

Ellera algoritms ir labirintu ģenerēšanas algoritms, kas efektīvi rada nevainojamus labirintus (labirintus bez cilpām un vienu ceļu starp jebkuriem diviem punktiem), izmantojot rindu pa rindu pieeju. Tas rada Kruskal algoritmam līdzīgus labirintus, taču tas tiek darīts, vienlaikus ģenerējot tikai vienu rindu, bez nepieciešamības saglabāt visu labirintu atmiņā. Tas padara to noderīgu ļoti lielu labirintu ģenerēšanai ļoti ierobežotās sistēmās un procesuāla satura ģenerēšanai.

Ideāls labirints ir labirints, kurā ir tieši viens ceļš no jebkura labirinta punkta uz jebkuru citu punktu. Tas nozīmē, ka jūs nevarat nonākt apļveida ceļos, bet bieži sastapsieties ar strupceļiem, kas liks jums apgriezties un atgriezties atpakaļ.

Šeit ģenerētajās labirinta kartēs ir noklusējuma versija bez sākuma un beigu pozīcijām, lai jūs paši varētu tās noteikt: būs risinājums no jebkura labirinta punkta uz jebkuru citu punktu. Ja vēlaties iedvesmu, varat ieslēgt ieteikto sākuma un beigu pozīciju un pat apskatīt risinājumu starp šīm divām pozīcijām.


Izveidot jaunu labirintu








Par Ellera algoritmu

Ellera algoritmu ieviesa Deivids Elers.

Algoritms ir ievērojams ar savu efektīvu rindu pa rindu pieeju labirintu ģenerēšanai, padarot to ideāli piemērotu bezgalīgiem labirintiem vai labirintiem, kas ģenerēti reāllaikā. Tas parasti tiek citēts procesuālā satura ģenerēšanas un labirintu ģenerēšanas literatūrā, taču man nav izdevies atrast primāros avotus, kuros būtu detalizēti aprakstīta tā sākotnējā publikācija.

Kā Ellera algoritms darbojas labirintu paaudzē

Ellera algoritms apstrādā vienu rindu vienlaikus, uzturot un modificējot savienoto šūnu kopas. Tas nodrošina savienojamību, vienlaikus izvairoties no cilpām, un efektīvi paplašina labirintu uz leju.

Teorētiski to var izmantot, lai ģenerētu bezgalīgus labirintus, taču, lai nodrošinātu, ka ģenerētais labirints ir faktiski atrisināms, kādā brīdī ir jāpārslēdzas uz "pēdējās rindas" loģiku, lai pabeigtu labirintu.

1. darbība: inicializējiet pirmo rindu

  • Katrai rindas šūnai piešķiriet unikālu kopas ID.

2. darbība: pievienojieties dažām blakus esošajām šūnām horizontāli

  • Nejauši sapludiniet blakus esošās šūnas, iestatot tām vienu un to pašu kopas ID. Tas nodrošina, ka ir horizontālas ejas.

3. darbība: izveidojiet vertikālus savienojumus ar nākamo rindu

  • Katrai rindā redzamajai kopai ir jāsavieno vismaz viena šūna uz leju (lai nodrošinātu savienojamību).
  • Nejauši izvēlieties vienu vai vairākas šūnas no katras kopas, lai izveidotu savienojumu ar nākamo rindu.

4. darbība: pārejiet uz nākamo rindu

  • Pārvietojiet vertikālos savienojumus, piešķirot to pašu kopas ID attiecīgajām tālāk esošajām šūnām.
  • Piešķiriet jaunu kopas ID visām nepiešķirtajām šūnām.

5. darbība: atkārtojiet 2.–4. darbību, līdz ir sasniegta pēdējā rinda

  • Turpiniet apstrādi pēc rindas.

6. darbība: apstrādājiet pēdējo rindu

  • Pārliecinieties, vai visas šūnas pēdējā rindā pieder vienai un tai pašai kopai, apvienojot visas atlikušās atsevišķās kopas.

Kopīgojiet pakalpojumā BlueskyKopīgot FacebookKopīgojiet vietnē LinkedInKopīgojiet vietnē TumblrKopīgot vietnē XKopīgojiet vietnē LinkedInPiespraust vietnē Pinterest

Mikkel Bang Christensen

Par autoru

Mikkel Bang Christensen
Mikels ir miklix.com radītājs un īpašnieks. Viņam ir vairāk nekā 20 gadu pieredze kā profesionālam programmētājam/programmatūras izstrādātājam, un pašlaik viņš strādā pilna laika darbu lielā Eiropas IT korporācijā. Kad viņš neraksta blogus, viņš pavada brīvo laiku, pievēršoties dažādām interesēm, hobijiem un aktivitātēm, kas zināmā mērā var atspoguļoties šajā tīmekļa vietnē aplūkoto tēmu daudzveidībā.