Miklix

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

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

مولد هزارتو با استفاده از الگوریتم اِلر برای ایجاد یک هزارتوی بی‌نقص. این الگوریتم جالب است زیرا فقط نیاز به نگه داشتن ردیف فعلی (نه کل هزارتو) در حافظه دارد، بنابراین می‌توان از آن برای ایجاد هزارتوهای بسیار بسیار بزرگ حتی در سیستم‌های بسیار محدود استفاده کرد.

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

Eller's Algorithm Maze Generator

الگوریتم اِلر یک الگوریتم تولید هزارتو است که با استفاده از رویکرد سطر به سطر، هزارتوهای کامل (هزارتوهایی بدون حلقه و دارای یک مسیر واحد بین هر دو نقطه) را به طور مؤثر تولید می‌کند. این الگوریتم هزارتوهایی مشابه الگوریتم کروسکال تولید می‌کند، اما این کار را با تولید فقط یک ردیف در هر زمان، بدون نیاز به ذخیره کل هزارتو در حافظه انجام می‌دهد. این امر آن را برای تولید هزارتوهای بسیار بزرگ در سیستم‌های بسیار محدود و برای تولید محتوای رویه‌ای مفید می‌کند.

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

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


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








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

الگوریتم اِلر توسط دیوید اِلر معرفی شد.

این الگوریتم به دلیل رویکرد کارآمد ردیف به ردیف خود در تولید هزارتو قابل توجه است، که آن را برای هزارتوهای نامحدود یا هزارتوهای تولید شده در زمان واقعی ایده‌آل می‌کند. این الگوریتم معمولاً در ادبیات تولید محتوای رویه‌ای و تولید هزارتو ذکر شده است، اما من نتوانسته‌ام منابع اصلی را که جزئیات انتشار اولیه آن را شرح دهند، پیدا کنم.

نحوه‌ی عملکرد الگوریتم اِلر برای تولید هزارتو

الگوریتم اِلر هر بار یک ردیف را پردازش می‌کند و مجموعه‌هایی از سلول‌های متصل را حفظ و اصلاح می‌کند. این الگوریتم اتصال را تضمین می‌کند و در عین حال از حلقه‌ها جلوگیری می‌کند و به طور مؤثر هزارتو را به سمت پایین گسترش می‌دهد.

از لحاظ تئوری می‌توان از آن برای تولید هزارتوهای بی‌نهایت استفاده کرد، با این حال برای اطمینان از اینکه هزارتوی تولید شده واقعاً قابل حل است، لازم است در مقطعی به منطق «ردیف نهایی» تغییر دهید تا هزارتو را تمام کنید.

مرحله ۱: مقداردهی اولیه ردیف اول

  • به هر سلول در ردیف یک شناسه مجموعه منحصر به فرد اختصاص دهید.

مرحله ۲: اتصال افقی چند سلول مجاور

  • سلول‌های مجاور را با تنظیم شناسه‌ی یکسان به صورت تصادفی ادغام کنید. این کار تضمین می‌کند که مسیرهای افقی وجود داشته باشند.

مرحله ۳: ایجاد اتصالات عمودی به ردیف بعدی

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

مرحله 4: رفتن به ردیف بعدی

  • با اختصاص دادن همان شناسه مجموعه به سلول‌های متناظر زیر، اتصالات عمودی را به جلو منتقل کنید.
  • شناسه‌های مجموعه جدید را به هر سلول اختصاص داده نشده اختصاص دهید.

مرحله ۵: مراحل ۲ تا ۴ را تا رسیدن به آخرین ردیف تکرار کنید

  • پردازش را ردیف به ردیف ادامه دهید.

مرحله 6: ردیف آخر را پردازش کنید

  • با ادغام مجموعه‌های جداگانه‌ی باقی‌مانده، مطمئن شوید که تمام سلول‌های ردیف آخر به یک مجموعه تعلق دارند.

مطالعه بیشتر

اگر از این پست لذت بردید، ممکن است این پیشنهادات را نیز بپسندید:


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

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

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

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