Miklix

Generador de laberints d'algoritmes de Kruskal

Publicat: 6 de març del 2025, a les 11:17:09 UTC

Generador de laberints utilitzant l'algoritme de Kruskal per crear un laberint perfecte. Aquest algorisme tendeix a crear laberints amb passadissos de longitud mitjana i molts carrerons sense sortida, així com una solució força recta.

Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

Kruskal's Algorithm Maze Generator

L'algoritme de Kruskal és un algorisme d'arbre d'abast mínim que es pot adaptar per a la generació de laberints. És especialment eficaç per crear laberints perfectes. Una alternativa a l'algoritme de Kruskal és l'algoritme de Prim, que també és un algorisme d'arbre d'abast mínim, però com que generen laberints idèntics i el de Kruskal s'executa més ràpid, no m'he molestat en implementar el de Prim.

Un laberint perfecte és un laberint en el qual hi ha exactament un camí des de qualsevol punt del laberint fins a qualsevol altre punt. Això vol dir que no pots acabar donant voltes, però sovint et trobaràs amb carrerons sense sortida, obligant-te a donar la volta i tornar enrere.

Els mapes de laberint generats aquí inclouen una versió predeterminada sense cap posició d'inici i d'arribada, de manera que les podeu decidir vosaltres mateixos: hi haurà una solució des de qualsevol punt del laberint fins a qualsevol altre punt. Si voleu inspiració, podeu activar una posició d'inici i d'arribada suggerida, i fins i tot veure la solució entre les dues.


Genera un laberint nou








Sobre l'algoritme de Kruskal

L'algorisme de Kruskal va ser creat per Joseph Bernard Kruskal, Jr., un matemàtic, estadístic i informàtic nord-americà. Va descriure per primera vegada l'algorisme l'any 1956 en el seu article "Sobre el subarbre d'abast més curt d'un gràfic i el problema del venedor ambulant".

L'algoritme està dissenyat per trobar l'arbre d'abast mínim (MST) d'un gràfic, assegurant que tots els vèrtexs estiguin connectats amb el pes total de vora mínim possible, evitant els cicles.

Com funciona l'algoritme de Kruskal per a la generació de laberints

Pas 1: inicialitzar

  • Tracta cada cel·la del laberint com un conjunt separat (un component únic).
  • Enumereu totes les parets entre cel·les adjacents com a vores potencials.

Pas 2: Ordena les parets

  • Barrejar o ordenar aleatòriament les parets. Si ho implementeu com un veritable algorisme de Kruskal, ordena les parets en un ordre aleatori (ja que la generació de laberints no requereix pesos).

Pas 3: processar parets

  • Itera a través de les parets remenades.
  • Si les dues cel·les dividides per la paret pertanyen a conjunts diferents (és a dir, encara no estan connectades al laberint), traieu la paret i fusioneu els conjunts.
  • Si ja estan en el mateix conjunt, saltar la paret (per evitar cicles).

Pas 4: Continueu fins a la finalització

  • Repetiu aquest procés fins que totes les cel·les estiguin connectades, formant un únic arbre.
  • Al final, cada cel·la està connectada amb les altres sense bucles ni seccions aïllades.

Com que l'algoritme de Kruskal es basa en la fusió de conjunts, es pot optimitzar mitjançant l'algorisme Union-Find, que proporciona una manera eficient de fer un seguiment de les cèl·lules connectades durant la generació del laberint. Podeu veure la meva implementació PHP de l'algorisme Union-Find aquí: Conjunt disjunt (algoritme Union-Find) en PHP

Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Bang Christensen

Sobre l'autor

Mikkel Bang Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.