Số lượng mê cung hợp lệ


12

Cho một WxHlưới, có bao nhiêu mê cung có thể có?

Những điều bạn biết về mê cung:

  1. Lưới chính xác là Hhình vuông cao và Whình vuông rộng.
  2. Có ba loại hình vuông: Bắt đầu, Kết thúc và Trống. Mê cung của bạn phải chứa chính xác 1 Bắt đầu và 1 Kết thúc, và tất cả các ô vuông còn lại đều trống.
  3. Có những bức tường bao quanh toàn bộ mê cung.
  4. Các bức tường có thể tồn tại trên cạnh giữa bất kỳ hai hình vuông, trừ khi nó phá vỡ quy tắc dưới đây:
  5. Phải tồn tại một đường dẫn từ hình vuông Bắt đầu đến hình vuông Kết thúc.

Do đó, với hai số, WH, bạn phải trả về một số duy nhất đại diện cho số lượng cấu hình vuông / tường có thể. Bạn được đảm bảo rằngW*H > 1

Ví dụ, 2x2mê cung có 100cấu hình chính xác khác nhau có thể.

Đây là một nên câu trả lời ngắn nhất sẽ thắng!


Có bất kỳ ràng buộc về kích thước và / hoặc thời gian chạy? Trừ khi ai đó tìm thấy một thuật toán có thể tính toán hiệu quả (có vẻ khó khăn), tôi hy vọng rằng hầu hết các giải pháp sẽ có thời gian chạy theo cấp số nhân. Có nghĩa là chúng sẽ nổ ở các kích cỡ vừa phải.
Reto Koradi 16/07/2015

@RetoKoradi không, không có ràng buộc thời gian chạy. Tôi không chắc chắn nếu các ràng buộc sẽ làm cho vấn đề không thể hay không.
Nathan Merrill

Câu trả lời:


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

Đây là phiên bản được đánh gôn (và kém hiệu quả hơn nhiều) của chương trình tôi đang sử dụng trong khi thảo luận về vấn đề với @Nathan. Tôi có thể lưu một vài byte bằng cách thay thế một số dấu cách không gian bằng các tab, nhưng tôi sẽ lưu nó cho lần sau.

Thuật toán chỉ đơn giản là tạo ra mọi mê cung, sau đó lấp đầy từ đầu, xem liệu chúng ta có vượt qua kết thúc vào một lúc nào đó hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.