Miklix

الگوریتم Kruskal مولد پیچ و خم

منتشر شده: ۱۶ فوریهٔ ۲۰۲۵ ساعت ۱۸:۰۱:۲۵ (UTC)

ژنراتور ماز با استفاده از الگوریتم Kruskal برای ایجاد یک پیچ و خم کامل. این الگوریتم تمایل به ایجاد پیچ و خم هایی با راهروهای متوسط و بن بست های متعدد و همچنین یک راه حل نسبتا مستقیم دارد.

این صفحه ماشینی از انگلیسی ترجمه شد تا در دسترس هر چه بیشتر مردم باشد. متأسفانه، ترجمه ماشینی هنوز یک فناوری کامل نشده است، بنابراین ممکن است خطاهایی رخ دهد. در صورت تمایل می توانید نسخه اصلی انگلیسی را در اینجا مشاهده کنید:

Kruskal's Algorithm Maze Generator

الگوریتم کروسکال یک الگوریتم درخت پوشا حداقل است که می تواند برای تولید پیچ و خم سازگار شود. به ویژه برای ایجاد پیچ و خم های عالی موثر است. جایگزینی برای الگوریتم Kruskal الگوریتم Prim است که همچنین یک الگوریتم درخت پوشا حداقل است، اما از آنجایی که آنها پیچ و خم های یکسانی ایجاد می کنند و Kruskal سریعتر اجرا می شود، من به خود زحمت اجرای Prim را نداده ام.

پیچ و خم کامل، پیچ و خم هایی است که در آن دقیقاً یک مسیر از هر نقطه در پیچ و خم به هر نقطه دیگر وجود دارد. این بدان معناست که شما نمی توانید در نهایت به دور زدن در دایره بپردازید، اما اغلب با بن بست هایی روبرو می شوید که شما را وادار می کند که بچرخید و به عقب برگردید.

نقشه های پیچ و خم تولید شده در اینجا شامل یک نسخه پیش فرض بدون هیچ موقعیت شروع و پایان است، بنابراین شما می توانید آن ها را برای خود تصمیم بگیرید: از هر نقطه در پیچ و خم تا هر نقطه دیگر راه حلی وجود خواهد داشت. اگر می خواهید الهام بگیرید، می توانید یک موقعیت پیشنهادی شروع و پایان را فعال کنید - و حتی راه حل بین این دو را ببینید.


ایجاد پیچ ​​و خم جدید








درباره الگوریتم Kruskal

الگوریتم کروسکال توسط جوزف برنارد کروسکال جونیور، ریاضیدان، آماردان و دانشمند کامپیوتر آمریکایی ایجاد شد. او برای اولین بار این الگوریتم را در سال 1956 در مقاله خود با عنوان "در مورد کوتاه ترین زیر درخت یک نمودار و مسئله فروشنده دوره گرد" توصیف کرد.

این الگوریتم برای یافتن حداقل درخت پوشا (MST) یک نمودار طراحی شده است و اطمینان حاصل می کند که همه رئوس با حداقل وزن لبه کل ممکن متصل می شوند و در عین حال از چرخه ها اجتناب می کنند.

الگوریتم Kruskal برای تولید پیچ و خم چگونه کار می کند؟

مرحله 1: مقداردهی اولیه

  • هر سلول در پیچ و خم را به عنوان یک مجموعه جداگانه (یک جزء منحصر به فرد) در نظر بگیرید.
  • تمام دیواره های بین سلول های مجاور را به عنوان لبه های بالقوه فهرست کنید.

مرحله 2: مرتب سازی دیوارها

  • دیوارها را به هم بزنید یا به طور تصادفی مرتب کنید. اگر آن را به عنوان یک الگوریتم Kruskal واقعی پیاده سازی می کنید، دیوارها را به ترتیب تصادفی مرتب کنید (زیرا تولید پیچ و خم نیازی به وزن ندارد).

مرحله 3: دیوارهای فرآیند

  • از طریق دیوارهای به هم ریخته تکرار کنید.
  • اگر دو سلول تقسیم شده توسط دیوار به مجموعه های مختلفی تعلق دارند (یعنی هنوز در پیچ و خم به هم متصل نشده اند)، دیوار را بردارید و مجموعه ها را ادغام کنید.
  • اگر آنها از قبل در یک مجموعه هستند، از دیوار صرف نظر کنید (برای جلوگیری از چرخه).

مرحله 4: تا زمان تکمیل ادامه دهید

  • این روند را تکرار کنید تا همه سلول ها به هم متصل شوند و یک درخت پوشا تشکیل دهند.
  • در پایان، هر سلول بدون حلقه یا بخش های جدا شده به سلول های دیگر متصل می شود.

از آنجایی که الگوریتم Kruskal به ادغام مجموعه ها متکی است، می توان آن را با استفاده از الگوریتم Union-Find بهینه کرد که راهی کارآمد برای ردیابی سلول های متصل در طول تولید پیچ و خم ارائه می دهد. شما می توانید پیاده سازی PHP الگوریتم Union-Find را در اینجا مشاهده کنید: مجموعه مجزا (الگوریتم Union-find) در PHP

در Bluesky به اشتراک بگذاریددر فیسبوک به اشتراک بگذاریددر لینکدین به اشتراک بگذاریددر Tumblr به اشتراک بگذاریددر X به اشتراک بگذاریددر لینکدین به اشتراک بگذاریدپین در پینترست

میکل بنگ کریستنسن

درباره نویسنده

میکل بنگ کریستنسن
مایکل خالق و صاحب miklix.com است. او بیش از 20 سال تجربه به عنوان یک برنامه نویس حرفه ای کامپیوتر / توسعه دهنده نرم افزار دارد و در حال حاضر به طور تمام وقت برای یک شرکت بزرگ فناوری اطلاعات اروپایی مشغول به کار است. هنگامی که وبلاگ نویسی نمی کند، اوقات فراغت خود را صرف مجموعه وسیعی از علایق، سرگرمی ها و فعالیت ها می کند، که ممکن است تا حدی در موضوعات مختلف پوشش داده شده در این وب سایت منعکس شود.