मान्य माज़ की संख्या


12

एक WxHग्रिड को देखते हुए , कितने संभावित मेज़ हैं?

भूलभुलैया के बारे में आप जो बातें जानते हैं:

  1. ग्रिड बिल्कुल चौड़े Hऔर Wचौड़े चौड़े हैं।
  2. तीन प्रकार के वर्ग हैं: प्रारंभ, समाप्त, और खाली। आपके भूलभुलैया में ठीक 1 प्रारंभ और 1 समाप्त होना चाहिए, और सभी शेष वर्ग खाली हैं।
  3. पूरी भूलभुलैया के चारों ओर दीवारें हैं।
  4. दीवारें किसी भी दो वर्गों के बीच किनारे पर मौजूद हो सकती हैं, जब तक कि यह नीचे के नियम को न तोड़ दे:
  5. स्टार्ट स्क्वायर से फिनिश स्क्वायर तक का रास्ता मौजूद होना चाहिए।

इसलिए, दो नंबर दिए गए हैं, Wऔर H, आपको एक वर्ग को संभव वर्ग / दीवार कॉन्फ़िगरेशन की संख्या का प्रतिनिधित्व करना चाहिए। आपको गारंटी है किW*H > 1

उदाहरण के लिए, 2x2भूलभुलैया के बिल्कुल 100अलग विन्यास हैं।

यह एक इसलिए सबसे छोटा उत्तर जीतता है!


क्या आकार और / या रनटाइम पर कोई अड़चन है? जब तक किसी को एक एल्गोरिथ्म नहीं मिलता है जो गणना को कुशलता से गणना कर सकता है (जो कठिन दिखता है), मुझे उम्मीद है कि अधिकांश समाधानों में घातीय रनटाइम होगा। मतलब, कि वे मध्यम आकार में भी फंस जाएंगे।
रेटो कोरदी

@RetoKoradi नहीं, कोई रनटाइम की कमी नहीं। मुझे यकीन नहीं है कि अगर बाधा समस्या को असंभव बना देगी या नहीं।
नाथन मेरिल

जवाबों:


3

पायथन 2, 329 310 बाइट्स

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

यह प्रोग्राम का गोल्फ (और अधिक अक्षम) संस्करण है जिसका उपयोग मैं @ नथन के साथ समस्या पर चर्चा करते समय कर रहा था। मैं कुछ बाइट्स को टैब के साथ बदलकर कुछ बाइट्स बचा सकता हूं, लेकिन बाद में इसके लिए बचत करूंगा।

एल्गोरिथ्म बस हर भूलभुलैया उत्पन्न करता है, फिर शुरू से बाढ़ भरता है, यह देखते हुए कि हम किसी बिंदु पर खत्म करते हैं या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.