यह सभी दिशाओं को सरणियों के रूप में एन्कोड करने की एक तकनीक है - प्रत्येक जोड़ी di[i],dj[i]
एक अलग दिशा है।
यदि हम कल्पना करते हैं कि हमारे पास एक स्थान x, y पर एक टुकड़ा है, और हम इसके x और इसके y मान को इसे पास के स्थान पर ले जाना चाहते हैं, तो 1,0 पूर्व, -1,0 पश्चिम, 0,1 है। दक्षिण है, 0, -1 उत्तर की और है।
(यहां मैंने कहा है कि ऊपर बाईं ओर 0,0 है और नीचे दाएं 4,4 है और दिखाया गया है कि सरणियों के प्रत्येक सूचकांक को केंद्रीय बिंदु, X से 2,2 पर क्या बनाया जाएगा।)
.....
.536.
.1X0.
.724.
.....
जिस तरह से इसे सेट किया गया है, यदि आप इंडेक्स पर बिटवाइड ^1
( ^
XOR) होने पर आपको विपरीत दिशा मिलती है - 0 और 1 विपरीत हैं, 2 और 3 विपरीत हैं और इसी तरह। (इसे स्थापित करने का एक और तरीका उत्तर में शुरू होने वाली घड़ी की दिशा में जाना है - फिर ^4
आपको विपरीत दिशा मिलती है।)
अब आप किसी दिए गए बिंदु से सभी दिशाओं का परीक्षण अपने di
और dj
सरणियों पर लूपिंग करके कर सकते हैं, बजाय इसके कि प्रत्येक दिशा को अपनी लाइन पर लिखने की जरूरत है (कुल मिलाकर आठ के लिए!) (बस सीमा जाँच करना न भूलें :))
diK
और सभी समीपवर्ती दिशाओं के बजाय djK
सभी शूरवीरों को दिशा दें। यहां, ^1
एक अक्ष के साथ फ्लिप ^4
करेगा, विपरीत नाइट लीप देगा।
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
:d[i], d[i+1]
मुझे चार कार्डिनल निर्देश देने के लिए आइटम जोड़े ।