Miklix

Крускалов алгоритам Мазе Генератор

Објављено: 16. фебруар 2025. 18:09:25 UTC
Последње ажурирано: 12. јануар 2026. 08:59:40 UTC

Генератор лавиринта који користи Крускалов алгоритам за креирање савршеног лавиринта. Овај алгоритам тежи да креира лавиринте са ходницима средње дужине и много ћорсокака, као и прилично правим решењем.

Ова страница је машински преведена са енглеског како би била доступна што већем броју људи. Нажалост, машинско превођење још увек није усавршена технологија, тако да може доћи до грешака. Ако желите, можете погледати оригиналну енглеску верзију овде:

Kruskal's Algorithm Maze Generator

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

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

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


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








О Крускаловом алгоритму

Крускалов алгоритам је креирао Џозеф Бернард Крускал млађи, амерички математичар, статистичар и рачунарски научник. Први пут је описао алгоритам 1956. године у свом раду „О најкраћем обухватном подстаблу графа и проблему трговачког путника“.

Алгоритам је дизајниран да пронађе минимално обухватно стабло (MST) графа, осигуравајући да су сви чворови повезани са минималном могућом укупном тежином ивице, избегавајући циклусе.

Како Крускалов алгоритам функционише за генерисање лавиринта

Корак 1: Иницијализација

  • Сваку ћелију у лавиринту третирајте као засебан скуп (јединствену компоненту).
  • Наведите све зидове између суседних ћелија као потенцијалне ивице.

Корак 2: Сортирајте зидове

  • Промешајте или насумично поређајте зидове. Ако се имплементира као прави Крускалов алгоритам, сортирајте зидове насумичним редоследом (пошто генерисање лавиринта не захтева тежине).

Корак 3: Обрада зидова

  • Понављајте кроз помешане зидове.
  • Ако две ћелије подељене зидом припадају различитим скуповима (тј. још увек нису повезане у лавиринту), уклоните зид и спојите скупове.
  • Ако су већ у истом сету, прескочите зид (да бисте избегли циклусе).

Корак 4: Наставите до завршетка

  • Понављајте овај поступак док се све ћелије не повежу, формирајући једно обухватно стабло.
  • На крају, свака ћелија је повезана са осталима без петљи или изолованих делова.

Пошто Крускалов алгоритам зависи од спајања скупова, може се оптимизовати коришћењем алгоритма Union-Find, који пружа ефикасан начин за праћење повезаних ћелија током генерисања лавиринта. Можете видети моју PHP имплементацију алгоритма Union-Find овде: Линк

Даље читање

Ако сте уживали у овом посту, можда ће вам се свидети и ови предлози:


Поделите на БлуескиПоделите на ФејсбукуДелите на ЛинкедИнуПодели на Тумблр-уПодели на КсДелите на ЛинкедИнуПин на Пинтерест-у

Миккел Цхристенсен

О аутору

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