Bir ızgarada bir kasaba düzeni oluşturma


9

Aşağıdaki öğeleri kullanarak kare bir ızgarada (izometrik olarak işlenir, ancak bu önemli değil) bir kasaba düzeni oluşturmak istiyorum:

  • 2x2 Evler
  • 1 birim genişliğinde yollar
  • Kanallar, 1 birim genişlik

Örnek düzen:

Örnek düzen

  • Her zaman belirli sayıda evim ve hepsini birbirine bağlamak için gereken sayıda yolum ve kanalım var.
  • Evlerin ön kapılarının önünde (her zaman sağa işaret eden) iki yol bulunmalıdır.
  • Arada çim alanların (boşluk) olması güzel olurdu.

Bunun için hazır bir algoritma var mı? Değilse, bunu uygulamak için hangi yönü düşünmeliyim?

Yanıtlar:


8

Tam olarak nasıl istediğinize bağlı olarak gitmenin birçok yolu vardır. İşte açıklamanıza uygun olacağını düşündüğüm bir yolun kaba bir taslağı:

Önce kanalları oluşturun. Daha sonra evleri rastgele yerleştirmeye başlayın, yerleştirdiğiniz her ev için yolu önüne yerleştirin ve mümkün değilse ya da yolun önüne yerleştirmek çirkin 2x2'lik bir blokla sonuçlanır. evin yeniden konumlandırılması. Birbirine yakın ancak mevcut yolları takip ederek birbirinden uzak bazı yol noktalarını tespit edin ve bunlar için bazı kısayollar yapmaya çalışın.

Bu tür şeyler en çok deney ve deneyim gerektirir. Genellikle rastgele bazı detaylar yapmaktan iyi sonuçlar alırsınız, bazı kriterleri karşılayıp karşılamadığını tespit edersiniz ve eğer yapmazsanız geri alınız ve tekrar deneyiniz.

Bu kesin görev için, zaten uzman değilseniz, konuyu okumaya devam edin, ayrıca temel yol bulmayı da iyi bir şekilde kavramanız gerekir. Ve unutmayın ki, yol bulmanın en kısa yoldan olması gerekmez, açıklamamın son kısmı için zaten var olan yolları yeniden kullanmak için biraz ağırlık vermek isteyebilirsiniz.

Bu hiç de kolay bir iş değildir, eğer takılırsanız geri dönün ve bize kodunuzu ve bazı örnek çıktılarınızı gösterin ve nasıl farklı olmasını istediğinizi ayrıntılı olarak açıklayın.

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.