Miklix

الگوریتم درختان در حال رشد مولد ماز

منتشر شده: ۱۶ فوریهٔ ۲۰۲۵ ساعت ۲۱:۳۸:۲۰ (UTC)
آخرین به روز رسانی: ۶ مارس ۲۰۲۵ ساعت ۹:۵۳:۴۰ (UTC)

مولد پیچ ​​و خم با استفاده از الگوریتم درخت در حال رشد برای ایجاد یک پیچ و خم کامل. این الگوریتم تمایل به ایجاد پیچ ​​و خم هایی شبیه به الگوریتم Hunt and Kill دارد، اما با یک راه حل معمولی تا حدودی متفاوت.

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

Growing Tree Algorithm Maze Generator

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

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

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


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








درباره الگوریتم درخت در حال رشد

الگوریتم درخت در حال رشد یک روش انعطاف پذیر و قدرتمند برای تولید پیچ ​​و خم های کامل است. این الگوریتم جالب است زیرا می تواند رفتار چندین الگوریتم تولید پیچ ​​و خم دیگر را شبیه سازی کند، مانند الگوریتم Prim، بازگشت بازگشتی و تقسیم بازگشتی، بسته به اینکه چگونه سلول بعدی را برای پردازش انتخاب می کنید.

چگونه الگوریتم درخت در حال رشد کار می کند

Interpretation

Interprialtary

Interpretation

Interprialtart. شبکه ای از سلول های بازدید نشده.

  • یک سلول شروع تصادفی را انتخاب کنید و آن را به یک لیست اضافه کنید.
  • مرحله 2: حلقه تولید پیچ ​​و خم

    • در حالی که لیست سلول خالی نیست:
      • یک سلول از لیست را انتخاب کنید
    • بر اساس یک استراتژی خاص انتخاب شده در زیر (plili در یک استراتژی انتخاب شده در زیر انتخاب کنید). سلول به یکی از همسایه های بازدید نشده خود (به طور تصادفی انتخاب شده است).
    • همسایه را به لیست اضافه کنید زیرا اکنون بخشی از پیچ و خم است.
    • اگر سلول انتخابی همسایه بازدید نشده ای ندارد، آن را از لیست حذف کنید.

    مرحله 3: زمانی که سلول های دیگر به پایان رسید، سلول های پایان یافتن وجود ندارد

  • فهرست، به این معنی که کل ماز حک شده است.
  • استراتژی های انتخاب سلول (انعطاف پذیری الگوریتم)

    ویژگی تعیین کننده الگوریتم درخت در حال رشد این است که چگونه انتخاب می کنید کدام سلول را پردازش کنید. این انتخاب به‌طور چشمگیری بر ظاهر ماز تأثیر می‌گذارد:

    جدیدترین سلول (رفتار پشته‌مانند) – ردیاب بازگشتی:

    • همیشه سلول‌هایی را که اخیراً اضافه شده‌اند انتخاب کنید.
    • راهروهای طولانی و پرپیچ و خم با بن‌بست‌های زیادی تولید می‌کند (مانند گذرگاه‌های عمقی به راحتی جستجو می‌شود). برای حل کردن.

    سلول تصادفی (الگوریتم پریم تصادفی):

    • هر بار یک سلول تصادفی از لیست انتخاب کنید.
    • یک پیچ و خم با توزیع یکنواخت تری با مسیرهای پیچیده و درهم ایجاد می کند.
    • کمتر و تعداد کمتری از راهروهای انشعاب
    (رفتار صف‌مانند):

    • همیشه قدیمی‌ترین سلول را در لیست انتخاب کنید.
    • مارپیچ‌هایی را با گستردگی یکنواخت‌تر، مانند یک الگوی جستجوی اول ایجاد می‌کند.
    • گذرگاه‌های کوتاه و پرپشت با اتصالات متراکم.
    • (این نسخه‌ای است که در اینجا پیاده‌سازی شده است.
    • (
    • Hy) رویکردها:

    ترکیب استراتژی‌ها برای ویژگی‌های مختلف ماز. به عنوان مثال:

    • 90% جدیدترین، 10% تصادفی: بیشتر شبیه یک پیچ و خم عقبگرد بازگشتی به نظر می رسد، اما با شاخه های گهگاهی که راهروهای طولانی را می شکند.
    • 50% جدیدترین، 50% قدیمی ترین: راهروهای طولانی را با رشد بوته ای متعادل می کند.

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

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

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

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