यदि आप एक उदाहरण के रूप grid(userguide) यहाँ मेरी पैकेज का उपयोग आरंभ करने के लिए में रुचि रखते। (और आप इसे का उपयोग नहीं करना चाहते हैं तो आपको स्रोत कोड उपयोगी में से कुछ मिल सकता है।)
4 पंक्तियों और 5 कॉलम के साथ एक ग्रिड बनाएं।
λ> :m + Math.Geometry.Grid
λ> let g = rectSquareGrid 4 5
λ> indices g
[(0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3),(2,0),(2,1),(2,2),(2,3),(3,0),(3,1),(3,2),(3,3),(4,0),(4,1),(4,2),(4,3)]
हम ग्रिड पदों के लिए "सिक्का मूल्यों" मैप करने के लिए सक्षम होना चाहते हैं, तो हम एक GridMap पैदा हो जाएगी।
λ> :m + Math.Geometry.GridMap
λ> let m = lazyGridMap g [5,4,3,8,6,0,2,1,0,7,0,1,9,4,3,2,3,4,0,9]
λ> m
lazyGridMap (rectSquareGrid 4 5) [5,4,3,8,6,0,2,1,0,7,0,1,9,4,3,2,3,4,0,9]
λ> toList m
[((0,0),5),((0,1),4),((0,2),3),((0,3),8),((1,0),6),((1,1),0),((1,2),2),((1,3),1),((2,0),0),((2,1),7),((2,2),0),((2,3),1),((3,0),9),((3,1),4),((3,2),3),((3,3),2),((4,0),3),((4,1),4),((4,2),0),((4,3),9)]
हम ग्रिड, में लेकिन आपके आवेदन के लिए किसी भी सेल के पड़ोसियों पता कर सकते हैं, हम एक समस्या का एक सा में चलाने: मेरे RectSquareGrid प्रकार विकर्ण चालें अनुमति नहीं है।
λ> neighbours (1,2) m
[(0,2),(1,3),(2,2),(1,1)]
अब, मैं Grid
के एक नए प्रकार है कि आपके आवश्यकताओं को पूरा करेगा बनाने के लिए खुशी होगी। वैकल्पिक रूप से, आप अपने खुद के समारोह लिख सकता है जो विकर्ण पड़ोसियों शामिल होंगे:
λ> let allowedMoves (x, y) g = filter (`inGrid` g) [(x+1,y-1), (x+1,y), (x+1,y+1)]
λ> allowedMoves (1,2) m
[(2,1),(2,2),(2,3)]
:
λ> let neighbours2 (x, y) g = filter (`inGrid` g) [(x-1,y-1), (x-1,y), (x-1,y+1), (x,y-1), (x,y+1), (x+1,y-1), (x+1,y), (x+1,y+1)]
λ> neighbours2 (1,2) m
[(0,1),(0,2),(0,3),(1,1),(1,3),(2,1),(2,2),(2,3)]
लेकिन आप केवल नीचे की ओर ले जाता है की अनुमति देता है में रुचि रखते हैं, या तो सीधे नीचे या विकर्ण हैं, तो यहाँ एक अधिक उपयोगी समारोह है
तो अब हम एक ऐसा फ़ंक्शन लिख सकते हैं जो आपको किसी दिए गए इंडेक्स से ग्रिड की निचली पंक्ति तक सभी संभावित पथ प्रदान करता है।
allPathsFrom a g | fst a == fst (size g) = [[a]]
| otherwise = Prelude.map (a:) xs
where xs = concatMap (\x -> allPathsFrom x g) ys
ys = allowedMoves a g
उदाहरण के लिए:
λ> allPathsFrom (0,1) m
[[(0,1),(1,0),(2,0),(3,0),(4,0)],[(0,1),(1,0),(2,0),(3,0),(4,1)],[(0,1),(1,0),(2,0),(3,1),(4,0)],[(0,1),(1,0),(2,0),(3,1),(4,1)],[(0,1),(1,0),(2,0),(3,1),(4,2)],[(0,1),(1,0),(2,1),(3,0),(4,0)],[(0,1),(1,0),(2,1),(3,0),(4,1)],[(0,1),(1,0),(2,1),(3,1),(4,0)],[(0,1),(1,0),(2,1),(3,1),(4,1)],[(0,1),(1,0),(2,1),(3,1),(4,2)],[(0,1),(1,0),(2,1),(3,2),(4,1)],[(0,1),(1,0),(2,1),(3,2),(4,2)],[(0,1),(1,0),(2,1),(3,2),(4,3)],[(0,1),(1,1),(2,0),(3,0),(4,0)],[(0,1),(1,1),(2,0),(3,0),(4,1)],[(0,1),(1,1),(2,0),(3,1),(4,0)],[(0,1),(1,1),(2,0),(3,1),(4,1)],[(0,1),(1,1),(2,0),(3,1),(4,2)],[(0,1),(1,1),(2,1),(3,0),(4,0)],[(0,1),(1,1),(2,1),(3,0),(4,1)],[(0,1),(1,1),(2,1),(3,1),(4,0)],[(0,1),(1,1),(2,1),(3,1),(4,1)],[(0,1),(1,1),(2,1),(3,1),(4,2)],[(0,1),(1,1),(2,1),(3,2),(4,1)],[(0,1),(1,1),(2,1),(3,2),(4,2)],[(0,1),(1,1),(2,1),(3,2),(4,3)],[(0,1),(1,1),(2,2),(3,1),(4,0)],[(0,1),(1,1),(2,2),(3,1),(4,1)],[(0,1),(1,1),(2,2),(3,1),(4,2)],[(0,1),(1,1),(2,2),(3,2),(4,1)],[(0,1),(1,1),(2,2),(3,2),(4,2)],[(0,1),(1,1),(2,2),(3,2),(4,3)],[(0,1),(1,1),(2,2),(3,3),(4,2)],[(0,1),(1,1),(2,2),(3,3),(4,3)],[(0,1),(1,2),(2,1),(3,0),(4,0)],[(0,1),(1,2),(2,1),(3,0),(4,1)],[(0,1),(1,2),(2,1),(3,1),(4,0)],[(0,1),(1,2),(2,1),(3,1),(4,1)],[(0,1),(1,2),(2,1),(3,1),(4,2)],[(0,1),(1,2),(2,1),(3,2),(4,1)],[(0,1),(1,2),(2,1),(3,2),(4,2)],[(0,1),(1,2),(2,1),(3,2),(4,3)],[(0,1),(1,2),(2,2),(3,1),(4,0)],[(0,1),(1,2),(2,2),(3,1),(4,1)],[(0,1),(1,2),(2,2),(3,1),(4,2)],[(0,1),(1,2),(2,2),(3,2),(4,1)],[(0,1),(1,2),(2,2),(3,2),(4,2)],[(0,1),(1,2),(2,2),(3,2),(4,3)],[(0,1),(1,2),(2,2),(3,3),(4,2)],[(0,1),(1,2),(2,2),(3,3),(4,3)],[(0,1),(1,2),(2,3),(3,2),(4,1)],[(0,1),(1,2),(2,3),(3,2),(4,2)],[(0,1),(1,2),(2,3),(3,2),(4,3)],[(0,1),(1,2),(2,3),(3,3),(4,2)],[(0,1),(1,2),(2,3),(3,3),(4,3)]]
ध्यान दें कि जब से GridMap
रों भी कर रहे हैं Grid
रों, हम m
या g
पर ऊपर सभी कार्यों के आह्वान कर सकते हैं।
λ> allPathsFrom (0,1) m
अगर तुम मुझे चाहते हैं मेरे grid
पैकेज के लिए एक ग्रिड विकर्ण चाल की इजाजत दी जोड़ने के लिए (nualeargais यानी डॉट पर एमी) मेरे जानते हैं।
क्या इन्हें सीधी रेखाएं होनी चाहिए या क्या आप प्रत्येक कदम के बाद दिशा तय कर सकते हैं? –
आपको सभी संभावित पथ बनाने की आवश्यकता है, इसलिए यदि मैं पंक्ति 1, स्थिति 2 पर शुरू करता हूं, तो मैं पंक्ति 2 में प्रत्येक संभावित स्थिति के लिए पंक्ति 2, स्थिति 1, 2, 3 और उसके बाद से जा सकता हूं, तो आप जा सकते हैं सीधे नीचे, तिरछे बाएं और दाएं। – user2035972
यदि यह मदद करता है, तो यह वही दृश्य जैसा दिखता है: http: //postimage.org/image/yrnrv8y2p/ – user2035972