Я розробляю гру з випадковими породженими підземеллями. Я хотів би розглянути це як пов'язаний, непрямий графік, у якому вузли є приміщеннями, а краї - дверима або коридорами. Тоді я вибираю «бічний» вузол як вхід підземелля, обчислюю відстань між цим входом та всіма іншими вузлами і вирішую, що один із найдальшіх вузлів - «ціль» підземелля (місце знаходження скарбу, начальника, принцеса тощо).
Я бачив 2 способи генерації остаточної топографії підземелля:
- Створіть спочатку випадковий графік, а потім спробуйте заповнити 2d світ кімнатами у випадкових місцях, дотримуючись крайових з'єднань. Я подумав, що це може бути часом важко, оскільки покоління кімнати може бути «замкнене», намагаючись помістити кімнати в неможливі місця.
- Створіть перші кімнати, розмістивши їх випадковим чином там, де вони підходять, а потім відобразіть результат на вузли та краї. Я вирішив спробувати це.
Моя ідея полягає у:
- Спочатку згенеруйте велику кімнату, яка б містила всю підземелля.
- Поставте стіну всередині великої кімнати у випадковому місці, розділивши велику кімнату на 2 менші кімнати різної площі.
- Потім я продовжую ділити кожну кімнату на 2, поки вони не надто малі, або загальна кількість номерів не досягне максимального (або будь-якої іншої умови). Кожна нова кімната - це вузол.
- Закінчивши, я перевіряю кожну кімнату і знаходжу всі сусідні інші приміщення, позначаючи 2 вузли як з'єднані краєм.
Таким чином я переконуюсь у тому, що всі кімнати мають можливе розташування у двовимірному світі та правильно відображені підключеним графіком.
Моя проблема полягає в тому, що занадто багато дверей і коридорів, що з'єднують кімнати.
Тому я хотів би алгоритм, який зменшує кількість ребер підключеного ненаправленого графіка , але підтримує його підключеним (усі вузли залишаються доступними) в кінці.