Numero di labirinti validi


12

Data una WxHgriglia, quanti possibili labirinti ci sono?

Cose che sai del labirinto:

  1. La griglia è esattamente Halta e Wquadrata.
  2. Esistono tre tipi di quadrati: Inizio, Fine e Vuoto. Il tuo labirinto deve contenere esattamente 1 inizio e 1 fine e tutti i quadrati rimanenti sono vuoti.
  3. Ci sono muri che circondano l'intero labirinto.
  4. I muri possono esistere sul bordo tra due quadrati qualsiasi, a meno che non infranga la seguente regola:
  5. Deve esistere un percorso dal quadrato iniziale al quadrato finale.

Pertanto, dati due numeri We H, è necessario restituire un singolo numero che rappresenta il numero di possibili configurazioni quadrate / a parete. Lo sei garantitoW*H > 1

Ad esempio, il 2x2labirinto ha esattamente 100diverse configurazioni possibili.

Questo è un quindi vince la risposta più breve!


Ci sono vincoli su dimensioni e / o tempo di esecuzione? A meno che qualcuno non trovi un algoritmo in grado di calcolare il conteggio in modo efficiente (che sembra difficile), mi aspetto che la maggior parte delle soluzioni abbia un tempo di esecuzione esponenziale. Significa che imploderanno anche a dimensioni moderate.
Reto Koradi,

@RetoKoradi no, nessun vincolo di runtime. Non sono sicuro se i vincoli renderebbero il problema impossibile o meno.
Nathan Merrill,

Risposte:


3

Python 2, 329 310 byte

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

Questa è la versione golfizzata (e molto più inefficiente) del programma che stavo usando mentre discutevo del problema con @Nathan. Posso salvare alcuni byte sostituendo alcuni rientri di spazio con le schede, ma lo salverò per dopo.

L'algoritmo è semplicemente generare ogni labirinto, quindi riempire inondazioni dall'inizio, vedendo se passiamo il traguardo o meno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.