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

पायथन में दिए गए मैट्रिक्स से अलग-अलग द्वीप आकृतियों की संख्या खोजने का कार्यक्रम

मान लीजिए कि हमारे पास 2d बाइनरी मैट्रिक्स है, हमें दिए गए मैट्रिक्स में अलग-अलग द्वीपों की संख्या ज्ञात करनी है। यहां 1 भूमि का प्रतिनिधित्व करता है और 0 पानी का प्रतिनिधित्व करता है, इसलिए एक द्वीप 1 का एक समूह है जो करीब है और जिसकी परिधि पानी से घिरी हुई है। यहां दो द्वीप अद्वितीय हैं यदि उनके आकार अलग हैं।

तो, अगर इनपुट पसंद है

1 0 0 0 0
1 0 1 0 1
0 1 1 0 1
0 0 1 0 0
1 0 0 0 0
1 1 0 1 1

तो आउटपुट 4 होगा (अलग द्वीप अलग-अलग रंगों में हैं)।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • फ़ंक्शन को परिभाषित करें dfs() । इसमें i, j, k, l

    . लगेगा
  • चटाई[i, j] :=0

  • आकृति के अंत में जोड़ी (i - k, j - l) डालें

  • अगर i + 1 <चटाई और चटाई की पंक्ति संख्या [i + 1, j] 1 है, तो

    • dfs(i + 1, j, k, l)

  • अगर j + 1 <चटाई और चटाई की कॉलम संख्या [i, j + 1] 1 है, तो

    • dfs(i, j + 1, k, l)

  • अगर i − 1>=0 और mat[i − 1, j] 1 है, तो

    • dfs(i − 1, j, k, l)

  • अगर j − 1>=0 और mat[i, j − 1] 1 है, तो

    • dfs(i, j − 1, k, l)

  • मुख्य विधि से निम्न कार्य करें -

  • सीएनटी:=0

  • आकार :=एक नया सेट

  • मैं के लिए 0 से लेकर पंक्ति तक चटाई की गिनती में, करें

    • j के लिए रेंज 0 से लेकर मैट की कॉलम काउंट तक, करें

      • अगर मैट [i, j] 1 है, तो

        • आकार :=एक नई सूची

        • dfs(i, j, i, j)

        • अगर आकार आकार में नहीं है, तो

          • सीएनटी:=सीएनटी + 1

        • आकृतियों में आकार डालें

  • वापसी सीएनटी

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

class Solution:
   def solve(self, mat):
      def dfs(i, j, k, l):
         mat[i][j] = 0
         shape.append((i − k, j − l))
      if i + 1 < len(mat) and mat[i + 1][j]:
         dfs(i + 1, j, k, l)
      if j + 1 < len(mat[0]) and mat[i][j + 1]:
         dfs(i, j + 1, k, l)
      if i − 1 >= 0 and mat[i − 1][j]:
         dfs(i − 1, j, k, l)
      if j − 1 >= 0 and mat[i][j − 1]:
         dfs(i, j − 1, k, l)
   cnt = 0
   shapes = set()
      for i in range(len(mat)):
         for j in range(len(mat[0])):
            if mat[i][j]:
               shape = []
               dfs(i, j, i, j)
               shape = tuple(shape)
               if shape not in shapes:
                  cnt += 1
                  shapes.add(shape)
      return cnt
ob = Solution()
matrix = [
   [1, 0, 0, 0, 0],
   [1, 0, 1, 0, 1],
   [0, 1, 1, 0, 1],
   [0, 0, 1, 0, 0],
   [1, 0, 0, 0, 0],
   [1, 1, 0, 1, 1]
]
print(ob.solve(matrix))

इनपुट

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

आउटपुट

4

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

    मान लीजिए कि हमारे पास एक संख्या n है, हमें उस संख्या के द्विआधारी प्रतिनिधित्व में मौजूद बिट 1 की संख्या ज्ञात करनी है। तो, अगर इनपुट 12 जैसा है, तो आउटपुट 2 होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - गिनती :=0 जबकि n गैर-शून्य है, करें गिनती :=गिनती + (n और 1) n :=(n / 2) की मंजिल

  1. पायथन में दिए गए मैट्रिक्स के स्थानान्तरण को खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक (n बटा n) मैट्रिक्स M है, हमें इसका स्थानान्तरण ज्ञात करना है। जैसा कि हम जानते हैं कि एक मैट्रिक्स का स्थानान्तरण पंक्ति और स्तंभ सूचकांकों को बदल देता है। अधिक औपचारिक रूप से, प्रत्येक r और c के लिए, मैट्रिक्स[r][c] =मैट्रिक्स[c][r]। तो, अगर इनपुट पसंद है 7 2 6 3 7 2 5

  1. पायथन में एक 2D मैट्रिक्स में अलग-अलग द्वीपों की संख्या ज्ञात कीजिए

    मान लीजिए कि हमारे पास एक बाइनरी मैट्रिक्स है। हमें इसमें द्वीपों की संख्या गिननी है। एक द्वीप वह स्थान है जो पानी से घिरा होता है और आसन्न भूमि को क्षैतिज या लंबवत रूप से जोड़कर बनता है। हम मान सकते हैं कि ग्रिड के चारों किनारे पानी से घिरे हैं। मान लीजिए कि ग्रिड इस तरह है - 1 1 0 0 0 1 1 0 0 0