Geçerli labirent sayısı


12

Bir WxHızgara göz önüne alındığında , kaç tane labirent var?

Labirent hakkında bildikleriniz:

  1. Izgara tam olarak Hyüksek ve Wgeniş karelerdir.
  2. Üç tür kare vardır: Başlat, Son ve Boş. Labirentinizde tam olarak 1 Başlangıç ​​ve 1 Bitiş bulunmalı ve kalan tüm kareler Boş olmalıdır.
  3. Tüm labirenti çevreleyen duvarlar var.
  4. Duvarlar, aşağıdaki kuralı ihlal etmedikçe herhangi iki kare arasındaki kenarda bulunabilir:
  5. Başlangıç ​​karesinden Bitiş karesine bir yol olmalıdır.

Bu nedenle, iki numara verilir, Wve H, mümkün kare / duvar konfigürasyonları sayısını temsil eden tek bir numara döndürmelidir. GarantilidirW*H > 1

Örneğin, 2x2labirent 100olası farklı konfigürasyonlara sahiptir.

Bu bir yani kısa cevap kazanır!


Boyut ve / veya çalışma süresinde herhangi bir kısıtlama var mı? Birisi sayımı verimli bir şekilde hesaplayabilen bir algoritma bulamazsa (ki bu zor görünüyor), çoğu çözümün üstel çalışma süresine sahip olmasını bekliyorum. Yani, orta ölçülerde bile patlayacaklar.
Reto Koradi

@RetoKoradi no, çalışma zamanı kısıtlaması yok. Kısıtlamaların sorunu imkansız hale getirip getirmeyeceğinden emin değilim.
Nathan Merrill

Yanıtlar:


3

Python 2, 329 310 bayt

from itertools import*
w,h=input()
R=range(w*h)
p=product
n=0
Z=[(x,y)for x,y in p(R,R)if abs(x%w-y%w)+abs(x/w-y/w)<2]
for s,f,W in p(R,R,p(*[((),z)for z in Z if z[0]<z[1]])):
 V={s};C=[s];v=0
 while C:
  c=C.pop();v|=c==f!=s;V|={c}
  for o,q in Z:C+=(c==o)*len({q,(o,q),(q,o)}-(V|set(W)))/3*[q] 
 n+=v
print n

Bu, @Nathan ile sorunu tartışırken kullandığım programın golf (ve çok daha verimsiz) sürümüdür. Bazı boşluk girintilerini sekmelerle değiştirerek birkaç bayt kaydedebilirim, ancak daha sonra kullanmak için kaydedeceğim.

Algoritma sadece her labirenti oluşturur, daha sonra bitişten bir noktaya geçip geçmeyeceğimizi görerek dolguyu doldurun.

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.