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

पायथन में व्यक्ति के आग से बचकर ऊपरी-बाएं या नीचे-दाएं सेल तक पहुंचने की जांच


मान लीजिए हमारे पास एक 2D मैट्रिक्स है जिसमें कुछ अलग मान हैं:

  • 0 खाली सेल के लिए

  • 1 व्यक्ति के लिए

  • 2 आग के लिए

  • 3 दीवार के लिए

अब मान लें कि केवल एक व्यक्ति है और प्रत्येक टर्न में आग चारों दिशाओं (ऊपर, नीचे, बाएं और दाएं) में फैलती है लेकिन आग दीवारों के माध्यम से नहीं फैल सकती। हमें जांचना है कि क्या व्यक्ति मैट्रिक्स के ऊपरी-बाएं कोने या नीचे-दाएं कोने तक जा सकता है। हमें ध्यान रखना है कि प्रत्येक टर्न में, व्यक्ति पहले चलता है, फिर आग फैलती है। यदि व्यक्ति उसी समय लक्ष्य सेल पर पहुंचता है जब आग पहुंचती है, तो वह सुरक्षित है।

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

000
001
002

तो आउटपुट True होगा, क्योंकि व्यक्ति ऊपरी बाएं कोने में जा सकता है।

हल करने के चरण

  • R := A की पंक्तियों की संख्या, C := A के स्तंभों की संख्या

  • bfs() फ़ंक्शन परिभाषित करें। यह queue लेगा

    • dist := एक मैप जिसमें queue के नोड कुंजी के रूप में हैं और सभी मान 0 हैं

    • जब तक queue खाली नहीं है, करें

      • node := queue का बायां आइटम, फिर बायां आइटम हटाएं

      • node के प्रत्येक पड़ोसी nei के लिए, करें

        • यदि nei, dist में नहीं है, तो

          • dist[nei] := dist[node] + 1

          • nei को queue के अंत में डालें

    • dist लौटाएं

  • मुख्य विधि से निम्नलिखित करें:

    • fire_que := एक डबल एंडेड क्यू

    • person_que := एक डबल एंडेड क्यू

    • प्रत्येक पंक्ति इंडेक्स r और पंक्ति A के लिए, करें

      • प्रत्येक स्तंभ इंडेक्स c और मान v के लिए पंक्ति में, करें

        • यदि v, 1 के समान है, तो (r, c) को person_que के अंत में डालें

        • अन्यथा जब v, 2 के समान है, तो (r, c) को fire_que के अंत में डालें

    • dist_fire := bfs(fire_que)

    • dist_person := bfs(person_que)

    • प्रत्येक place के लिए (0, 0), (R - 1, C - 1) में, करें

      • यदि (dist_fire[place] यदि मौजूद नहीं तो INF) >= (dist_person[place] यदि मौजूद नहीं तो 2 * INF), तो True लौटाएं

    • False लौटाएं

    उदाहरण

    from collections import deque
    
    class Solution:
        def solve(self, A):
            INF = int(1e9)
            R, C = len(A), len(A[0])
            def get_nei(r, c):
                for nr, nc in [[r - 1, c], [r, c - 1], [r + 1, c], [r, c + 1]]:
                    if 0 <= nr < R and 0 <= nc < C and A[nr][nc] != 3:
                        yield nr, nc
            def bfs(queue):
                dist = {node: 0 for node in queue}
                while queue:
                    node = queue.popleft()
                    for nei in get_nei(*node):
                        if nei not in dist:
                            dist[nei] = dist[node] + 1
                            queue.append(nei)
                return dist
            fire_que = deque()
            person_que = deque()
            for r, row in enumerate(A):
                for c, v in enumerate(row):
                    if v == 1:
                        person_que.append((r, c))
                    elif v == 2:
                        fire_que.append((r, c))
            dist_fire = bfs(fire_que)
            dist_person = bfs(person_que)
            for place in ((0, 0), (R - 1, C - 1)):
                if dist_fire.get(place, INF) >= dist_person.get(place, 2 * INF):
                    return True
            return False
    
    ob = Solution()
    matrix = [
        [0, 0, 0],
        [0, 0, 1],
        [0, 0, 2]
    ]
    print(ob.solve(matrix))
    

    इनपुट

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

    आउटपुट

    True
  1. पायथन में जांचें कि रोबोट लक्ष्य स्थिति तक पहुंच सकता है या नहीं पायथन में जांचें कि रोबोट लक्ष्य स्थिति तक पहुंच सकता है या नहीं

    मान लीजिए हमारे पास एक रोबोट है, जो वर्तमान में स्थिति (0, 0) (कार्टेशियन प्लेन) पर बैठा है। यदि हमारे पास उसकी चालों की सूची है जो वह चल सकता है, जिसमें N(उत्तर), S(दक्षिण), W(पश्चिम), और E(पूर्व) हैं। हमें जांचना है कि क्या वह गंतव्य निर्देशांक (x, y) पर पहुंच सकता है। उदाहरण के लिए, यदि इनपुट mov

  1. - पायथन में जांचें कि क्या हम बाएं या दाएं छोर तक पहुंच सकते हैं

    मान लीजिए हमारे पास तीन प्रकार के अक्षरों वाली एक स्ट्रिंग है: R, B, और डॉट (.)। यहां R हमारी वर्तमान स्थिति को दर्शाता है, B एक अवरुद्ध स्थिति को दर्शाता है, और डॉट (.) एक खाली स्थिति को दर्शाता है। अब, एक चरण में, हम अपनी वर्तमान स्थिति से किसी भी आसन्न स्थिति पर जा सकते हैं, जब तक कि वह वैध (खाली

  1. - पायथन में जांचने का प्रोग्राम कि क्या किसी शहर से किसी अन्य शहर तक जाया जा सकता है

    मान लीजिए हमारे पास n शहर हैं जिन्हें रेंज [0, n) में संख्या के रूप में दर्शाया गया है और हमारे पास एकतरफा सड़कों की एक सूची है जो एक शहर को दूसरे से जोड़ती है। हमें जांचना है कि क्या हम किसी शहर से किसी अन्य शहर तक पहुंच सकते हैं। उदाहरण के लिए, यदि इनपुट n = 3, roads = [[0,1],[0,2],[1,0],[1,2],[2