Bir grafiğin kenar sayısını azaltarak bağlı tutun


10

Rastgele oluşturulan zindanlarla bir oyun tasarlıyorum. Bunu bağlı, yönlendirilmemiş bir grafik olarak görmek istiyorum düğümlerin oda ve kenarların kapı veya koridor olduğu . Sonra zindan girişi olarak bir "yan" düğümü seçiyorum, bu giriş ve diğer tüm düğümler arasındaki mesafeyi hesaplıyorum ve en uzak düğümlerden birinin zindanın "hedefi" olduğuna karar veriyorum (hazinenin yeri, patron, prenses, vb.).

Son zindan topografisini üretmenin 2 yolunu gördüm:

  • Önce rastgele bir grafik oluşturun, sonra 2d dünyasını kenar bağlantılarına saygı göstererek rastgele konumlardaki odalarla doldurmaya çalışın. Oda üretimi "kilitli" oda imkansız yerlerde sığdırmak için çalışıyor olabilir çünkü bu bazen zor olacağını düşündüm.
  • İlk odaları oluşturun, rastgele yerleştirildikleri yere yerleştirin, ardından sonucu düğümlere ve kenarlara eşleyin. Bunu denemeye karar verdim.

Benim fikrim:

  • İlk önce tüm zindanı içerecek büyük bir oda yaratın.
  • Büyük odayı rastgele bir yerde, büyük odayı farklı alandaki 2 küçük odaya bölen bir duvar koyun.
  • Sonra her odayı çok küçük olana kadar veya toplam oda sayısı maksimuma (veya başka bir koşula) ulaşıncaya kadar ikiye bölmeye devam ediyorum. Her yeni oda bir düğümdür.
  • Bittiğinde, her odayı kontrol ediyorum ve diğer düğümleri buluyorum, 2 düğümü bir kenara bağlı olarak işaretliyorum.

Bu şekilde, tüm odaların 2B dünyasında olası bir konuma sahip olmasını ve bağlı bir grafikle doğru şekilde eşlenmesini sağlarım.

Benim sorunum çok fazla kapı ve oda bağlayan koridorlar olmasıdır.

Bu yüzden bağlı yönlendirilmemiş bir grafiğin kenar sayısını azaltan , ancak sonunda bağlı (tüm düğümlere ulaşılabilir durumda kalan) bir algoritma istiyorum .


Bilmek istiyorsanız fikriniz temelde bir ikili arama ağacıdır. Onu kullandım; oldukça güzel zindanlar yapar ve kolaydır. :)
Komünist Ördek

2
Bilginize: Tam bir grafiğin tüm köşe çiftleri arasında kenarları vardır , bu nedenle (yinelenen kenarlara izin verilmediğini varsayarak) herhangi bir kenarı kaldıramazsınız ve yine de tam bir grafiğiniz olur. Doğru terim bağlı bir grafiktir .
Michael Madsen

İkili arama ağacı, bağlı grafik, sağ. Geleneksel şeylerle çok kötüyüm.
Splo

Yanıtlar:


13

Grafiğiniz için minimum yayılma ağacını elde etmek için Prim Algoritmasını kullanın (rastgele ağırlıklar ekleyin veya girişin yakınına daha yüksek ağırlıklar ekleyin veya istediğiniz bir algoritmayı yapın) ve rastgele bazı kapıları / kenarları yeniden ekleyin. Bu şekilde, tüm odalara ve birkaç ekstra yedek yola sahip olacaksınız.


1
Tabii, asgari yayılan ağaç, elbette! İyi fikir, teşekkürler.
Splo


0

Inkwell Ideas'tan bu listedeki zindan jeneratörlerinden bazıları açık kaynaklıdır veya algoritmaları hakkında dokümantasyon sağlar. Google ayrıca '[programlama dili adı] zindan jeneratörü' aramasıyla size bol bol verecektir. Ne yazık ki, şimdiye kadar karşılaştığım en iyi belgelenmiş olmasına rağmen, favorim bu yöntemlerden herhangi biri tarafından bitirilemez ve son zamanlarda bir sabit disk kazasında kaybettiğim için adını hatırlayamıyorum. Bu sürücüyü kurtarma işlemini gerçekleştirdikten sonra bu yanıtı güncelleyeceğim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.