Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में पानी से सबसे लंबी दूरी वाली जमीन खोजने का प्रोग्राम


मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है जहां 0 पानी दर्शाता है और 1 जमीन दर्शाता है। अब हमें वह जमीन ढूंढनी है जिसकी पानी से सबसे लंबी मैनहट्टन दूरी है और अंत में दूरी लौटानी है।

उदाहरण के लिए, यदि इनपुट मैट्रिक्स है:

1111
1101
1111
0011

तो आउटपुट 3 होगा, क्योंकि [0,0] सेल की पानी से मैनहट्टन दूरी 3 है।

समाधान दृष्टिकोण

इस समस्या को हल करने के लिए हम मल्टी-सोर्स BFS का उपयोग करेंगे:

  • यदि A खाली है, तो 0 लौटाएं
  • R := पंक्तियों की संख्या, C := कॉलम की संख्या
  • distance := R x C क्रम की मैट्रिक्स, 0 से भरी हुई
  • q := डबल-एंडेड क्यू जिसमें वे पेयर (r, c) हों जहां matrix[r][c] == 0 हो
  • यदि q का आकार 0 या R*C है, तो -1 लौटाएं
  • जब तक q खाली नहीं है:
    • (r, c) := q का बायां तत्व, q से हटाएं
    • प्रत्येक पेयर (x, y) के लिए [(r-1,c), (r+1,c), (r,c+1), (r,c-1)] में:
      • यदि x और y मैट्रिक्स की रेंज में हैं और A[x][y] == 1 है:
        • A[x][y] := 0
        • distance[x][y] := distance[r][c] + 1
        • (x, y) को q के अंत में जोड़ें
  • प्रत्येक पंक्ति के अधिकतम तत्व वाली लिस्ट बनाएं
  • उस लिस्ट का अधिकतम लौटाएं

पायथन कार्यान्वयन

from collections import deque

class Solution:
    def solve(self, A):
        if not A:
            return 0
        R, C = len(A), len(A[0])
        distance = [[0] * C for _ in range(R)]
        q = deque((r, c) for r in range(R) for c in range(C) if not A[r][c])
        if len(q) in (0, R * C):
            return -1
        while q:
            r, c = q.popleft()
            for x, y in [(r - 1, c), (r + 1, c), (r, c + 1), (r, c - 1)]:
                if 0 <= x < R and 0 <= y < C and A[x][y]:
                    A[x][y] = 0
                    distance[x][y] = distance[r][c] + 1
                    q.append((x, y))
        return max(max(row) for row in distance)

ob = Solution()
matrix = [
    [1, 1, 1, 1],
    [1, 1, 0, 1],
    [1, 1, 1, 1],
    [0, 0, 1, 1]
]
print(ob.solve(matrix))

इनपुट

[ [1, 1, 1, 1], [1, 1, 0, 1], [1, 1, 1, 1], [0, 0, 1, 1] ]

आउटपुट

3
  1. - पायथन में दो संख्या सूचियों से सबसे बड़ी दूरी वाली जोड़ी खोजने का प्रोग्राम

    मान लीजिए हमारे पास A और B नामक दो संख्याओं की सूचियां हैं, और उनकी लंबाई समान है। हमें सभी 0 <= i < j < n के लिए अधिकतम मान ढूंढना है: |a[i]-a[j]| + |b[i]-b[j]| + |i-j|।उदाहरण के लिए, यदि इनपुट A = [2, 4, 10, 6] और B = [3, 4, 7, 5] है, तो आउटपुट 14 होगा, जब i=0, j=2 पर |2-10| + |3-7| + |0-2| = 8+4+

  1. - पायथन में दी गई शर्त के साथ सबसे लंबे सबलिस्ट की लंबाई खोजने का प्रोग्राम

    सबलिस्ट का अधिकतम। 6।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे−ret := 0दो डबल एंडेड क्यू minq और maxq परिभाषित करेंl := 0, r := 0जब तक r < nums का आकार, करेंn := nums[r]जब तक minq और n < nums[minq का अंतिम तत्व], करेंminq से अंतिम तत्व हटाएंr को minq के अंत में डालें nums[maxq का अंतिम तत

  1. - पायथन में स्ट्रिंग्स की सूची से सबसे लंबा सामान्य उपसर्ग खोजने का प्रोग्राम

    मान लीजिए हमारे पास लोअरकेस स्ट्रिंग्स की एक सूची है, हमें सबसे लंबा सामान्य उपसर्ग ढूंढना है। उदाहरण के लिए, यदि इनपुट [antivirus, anticlockwise, antigravity] है, तो आउटपुट anti होगा। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: words सूची को वर्णमाला क्रम में क्रमबद्ध करें prefix := एक नई स