मान लीजिए हमारे पास अद्वितीय स्ट्रिंग्स का एक मैट्रिक्स है जो सिटी ब्लॉक्स को दर्शाता है, और एक और स्ट्रिंग्स की सूची है जिसमें विजिट करने वाले ब्लॉक्स हैं। यदि हम matrix[0][0] ब्लॉक पर हैं, तो हर ब्लॉक को क्रम से विजिट करने के लिए आवश्यक कुल मैनहट्टन दूरी ढूंढें।
यदि इनपुट इस तरह है:
| Q | B | C |
| D | E | Z |
| G | G | i |
Block = [H,B,C]
तो आउटपुट 6 होगा क्योंकि "h" 2 ब्लॉक नीचे (दक्षिण) और 1 ब्लॉक दाएं (पूर्व), "b" 2 ब्लॉक ऊपर (उत्तर), "c" 1 ब्लॉक दाएं (पूर्व)।
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- coords := एक मैप जिसकी कुंजी 'start' और मान (0, 0) है
- mat में प्रत्येक पंक्ति के लिए, करें:
- mat में प्रत्येक कॉलम के लिए, करें:
- (row,col) को coords[mat[row][col]] में डालें
- mat में प्रत्येक कॉलम के लिए, करें:
- dist := 0
- blocks को शुरुआत में 'start' जोड़कर अपडेट करें
- i को 0 से blocks के आकार -1 तक के लिए, करें:
- c1 := coords[blocks[i]]
- c2 := coords[blocks[i+1]]
- d := |c1[0]-c2[0]| + |c1[1]-c2[1]|
- dist := dist + d
- dist लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
class Solution:
def solve(self, mat, blocks):
coords = {'start': (0,0)}
for row in range(len(mat)):
for col in range(len(mat[row])):
coords[mat[row][col]] = (row,col)
dist = 0
blocks = ['start']+blocks
for i in range(len(blocks)-1):
c1 = coords[blocks[i]]
c2 = coords[blocks[i+1]]
d = abs(c1[0]-c2[0]) + abs(c1[1]-c2[1])
dist += d
return dist
ob = Solution()
inp = [["q", "b", "c"], ["d", "e", "z"], ["g", "h", "i"]]
blk = ["h", "b", "c"]
print(ob.solve(inp, blk))
इनपुट
[["q", "b", "c"],["d", "e", "z"],["g", "h", "i"]]
आउटपुट
6