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

पायथन में एक पानी सेल को भूमि में बदलकर सबसे बड़ा द्वीप ज्ञात करने का प्रोग्राम


मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है जहां 1 भूमि दर्शाता है और 0 पानी दर्शाता है। और एक द्वीप 1 का एक समूह है जो पानी से घिरा हुआ है। हमें सबसे बड़े द्वीप का आकार ज्ञात करना है। हमें अधिकतम एक पानी सेल को भूमि सेल में बदलने की अनुमति है।

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

101
000
110
111

तो आउटपुट 7 होगा, क्योंकि हम एक पानी सेल को भूमि में बदलकर दो द्वीपों को जोड़ सकते हैं।

हल करने के चरण

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

  • mass := एक नया मैप

  • id := 555

  • floodfill() फ़ंक्शन परिभाषित करें। यह r, c, id लेगा

    • यदि r और c मैट्रिक्स की रेंज में हैं और mat[r, c] 1 है, तो

      • mat[r, c] := id

      • mass[id] := mass[id] + 1

      • प्रत्येक जोड़ी (r2, c2) के लिए [(r + 1, c), (r - 1, c), (r, c + 1), (r, c - 1)] में, करें

        • floodfill(r2, c2, id)

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

    • r के लिए 0 से R तक की रेंज में, करें

      • c के लिए 0 से C तक की रेंज में, करें

        • यदि mat[r, c], 1 के समान है, तो

          • id := id + 1

          • mass[id] := 0

          • floodfill(r, c, id)

    • ans := (mass के सभी मान और 1) का अधिकतम

    • r के लिए 0 से R - 1 तक की रेंज में, करें

      • c के लिए 0 से C - 1 तक की रेंज में, करें

        • यदि mat[r, c], 0 के समान नहीं है, तो अगले इटरेशन पर जाएं

        • island_set := एक नया सेट

        • प्रत्येक जोड़ी (r2, c2) के लिए [(r + 1, c), (r - 1, c), (r, c + 1), (r, c - 1)] में, करें

          • यदि r2 और c2, mat की रेंज में हैं और mat[r2, c2] 1 है, तो

            • mat[r2, c2] को island_set में जोड़ें

          • ans := ans और (1 + island_set में प्रत्येक island के लिए mass[island] का योग) का अधिकतम

      • ans लौटाएं

      उदाहरण

      class Solution:
          def solve(self, mat):
              R, C = len(mat), len(mat[0])
              mass = {}
              id = 555
              def floodfill(r, c, id):
                  nonlocal R, C, mat, mass
                  if 0 <= r < R and 0 <= c < C and mat[r][c] == 1:
                      mat[r][c] = id
                      mass[id] = mass.get(id, 0) + 1
                      for r2, c2 in [(r + 1, c), (r - 1, c), (r, c + 1), (r, c - 1)]:
                          floodfill(r2, c2, id)
              for r in range(R):
                  for c in range(C):
                      if mat[r][c] == 1:
                          id += 1
                          mass[id] = 0
                          floodfill(r, c, id)
              ans = max([val for val in mass.values()] + [1])
              for r in range(R):
                  for c in range(C):
                      if mat[r][c] != 0:
                          continue
                      island_set = set()
                      for r2, c2 in [(r + 1, c), (r - 1, c), (r, c + 1), (r, c - 1)]:
                          if 0 <= r2 < R and 0 <= c2 < C and mat[r2][c2]:
                              island_set.add(mat[r2][c2])
                      ans = max(ans, 1 + sum([mass[island] for island in island_set]))
              return ans
      
      ob = Solution()
      matrix = [
          [1, 0, 1],
          [0, 0, 0],
          [1, 1, 0],
          [1, 1, 1]
      ]
      print(ob.solve(matrix))
      

      इनपुट

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

      आउटपुट

      7
  1. पायथन में ग्रिड में ब्लॉक जोड़कर द्वीपों की संख्या ज्ञात करने का प्रोग्राम पायथन में ग्रिड में ब्लॉक जोड़कर द्वीपों की संख्या ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास पानी का एक अनंत ग्रिड है। हम उस ग्रिड में भूमि के ब्लॉक एक-एक करके जोड़ सकते हैं। हमारे पास निर्देशांकों की एक सूची है जिसे land_requests कहते हैं जहां प्रत्येक निर्देशांक [r, c] के रूप में है जहां r पंक्ति के लिए है और c स्तंभ के लिए। हमें एक सूची ज्ञात करनी है जहां प्रत्येक तत

  1. Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक ऐरे दिया गया है, हमें ऐरे के सबसे बड़े तत्व की गणना करने की आवश्यकता है। यहां हम ब्रूट-फोर्स दृष्टिकोण का उपयोग करते हैं जिसमें हम पूरे लूप को पार करके और तत्व प्राप्त करके सबसे बड़ा तत्व निकालते हैं। हम नीच

  1. पायथन प्रोग्राम: ऐरे में सबसे बड़ा एलिमेंट ढूंढें पायथन प्रोग्राम: ऐरे में सबसे बड़ा एलिमेंट ढूंढें

    इस लेख में, हम दिए गए प्रॉब्लम स्टेटमेंट को हल करने के समाधान और दृष्टिकोण के बारे में सीखेंगे। प्रॉब्लम स्टेटमेंट इनपुट के रूप में एक ऐरे दिए जाने पर, हमें ऐरे में सबसे बड़ा एलिमेंट ढूंढने की आवश्यकता है। दृष्टिकोण हम max को पहले एलिमेंट के रूप में इनिशियलाइज़ करते हैं। इसके बाद, हम दिए गए ऐरे