Я намагаюся довільно генерувати спрямований графік для того, щоб скласти головоломку, подібну до крижаних головоломок від Pokemon.
Це, по суті, те, що я хочу мати можливість випадковим чином генерувати: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory .
Мені потрібно мати можливість обмежувати розмір графіка в розмірах x і y. У прикладі, наведеному у посиланні, воно обмежилося б сіткою 8x4.
Проблема, з якою я стикаюся, полягає не у випадковому генеруванні графіка, а у випадковому генеруванні графіка, який я можу правильно відмітити у 2d просторі, оскільки мені потрібно щось (наприклад, скеля) на протилежному боці вузла, щоб зробити це візуально має сенс, коли ви перестаєте ковзати. Проблема в цьому полягає в тому, що іноді скеля опиняється на шляху між двома іншими вузлами або, можливо, на іншому самому вузлі, через що весь графік порушується.
Обговоривши проблему з кількома людьми, яких я знаю, ми дійшли декількох висновків, які можуть призвести до її вирішення.
- Включення перешкод у сітці як частина графіка при її побудові.
- Почніть з повністю заповненої сітки і просто намалюйте випадковий шлях і видаліть блоки, які змусять цей шлях працювати.
Потім проблемою стає з'ясування, які з них видалити, щоб уникнути додаткового, коротшого шляху. Ми також думали, що алгоритм динамічного програмування може бути корисним, хоча ніхто з нас не надто вмілий створити алгоритми динамічного програмування з нічого. Будь-які ідеї чи посилання на те, як називається ця проблема офіційно (якщо це офіційна проблема з графіком), були б найбільш корисними.
Ось кілька прикладів того, що я досяг до цього часу, лише випадковим чином розміщуючи блоки та генеруючи графік навігації з обраного початку / кінця. Ідея (як описано в попередньому посиланні) полягає в тому, що ви починаєте з зеленого S і хочете дістатися до зеленого F. Ви робите це, рухаючись вгору / вниз / вліво / вправо, і продовжуєте рухатися в обраному напрямку, поки не натиснете на стіна. На цих малюнках сірий - це стіна, білий - підлога, а фіолетова лінія - мінімальна довжина від початку до кінця, а чорні лінії та сірі крапки представляють можливі шляхи.
Ось кілька поганих прикладів випадково згенерованих графіків:
Ось кілька хороших прикладів випадково згенерованих (або налаштованих вручну) графіків:
Я також, здавалося, помічав більш складні, коли насправді грає це як головоломка - це ті, у кого багато мінімумів вузлів на мінімальному шляху.