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

पायथन में दो मानचित्रों में अतिव्यापी द्वीपों की संख्या गिनने का कार्यक्रम

मान लीजिए कि हमारे पास दो बाइनरी मैट्रिक्स हैं mat1 तथा mat2। यहां 1 भूमि का प्रतिनिधित्व करता है और 0 पानी का प्रतिनिधित्व करता है, यदि पानी से घिरे 1 (भूमि) का समूह द्वीप कहलाता है। हमें एक ही निर्देशांक पर mat1 और mat2 दोनों में मौजूद द्वीपों की संख्या ज्ञात करनी है।

तो, अगर इनपुट mat1 की तरह है =

1 0 1
1 0 0
1 0 0

और मैट2 =

1 0 1
1 0 0
1 0 1

तो आउटपुट 2 होगा, क्योंकि अतिव्यापी द्वीप हैं,

1 0 1
1 0 0
1 0 1

इसलिए दो अतिव्यापी द्वीप हैं।

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

  • r :=mat1 की पंक्ति गणना
  • c :=mat1 की कॉलम संख्या
  • last_row :=r - 1
  • last_col :=c - 1
  • एक फ़ंक्शन चिह्न () को परिभाषित करें। यह ले जाएगा मैं, जे
  • mat1[i, j] :=0
  • mat2[i, j] :=0
  • यदि i शून्य नहीं है और (mat1[i-1, j] या mat2[i-1, j] कोई भी शून्य नहीं है), तो
    • चिह्नित करें(i-1, j)
  • यदि j शून्य नहीं है और (mat1[i, j-1] या mat2[i, j-1] कोई भी शून्य नहीं है), तो
    • चिह्नित करें(i, j-1)
  • अगर j
  • चिह्नित करें(i, j + 1)
  • अगर मैं
  • चिह्नित करें(i + 1, j)
  • मुख्य विधि से, निम्न कार्य करें -
  • मैं के लिए 0 से r -1 की सीमा में, करो
    • जे के लिए 0 से सी -1 की सीमा में, करो
      • यदि mat1[i, j] mat2[i, j] के समान नहीं है, तो
        • चिह्नित करें(i, j)
  • द्वीप :=0
  • मैं के लिए 0 से r -1 की सीमा में, करो
    • जे के लिए 0 से सी -1 की सीमा में, करो
      • यदि mat1[i, j] गैर-शून्य है, तो
        • द्वीप :=द्वीप + 1
        • चिह्नित करें(i, j)
  • वापसी द्वीप
  • उदाहरण

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

    def solve(mat1, mat2):
       r = len(mat1)
       c = len(mat1[0])
       last_row = r - 1
       last_col = c - 1
    
       def mark(i, j):
          mat1[i][j] = mat2[i][j] = 0
          if i and (mat1[i - 1][j] or mat2[i - 1][j]):
             mark(i - 1, j)
          if j and (mat1[i][j - 1] or mat2[i][j - 1]):
             mark(i, j - 1)
          if j < last_col and (mat1[i][j + 1] or mat2[i][j + 1]):
             mark(i, j + 1)
          if i < last_row and (mat1[i + 1][j] or mat2[i + 1][j]):
             mark(i + 1, j)
    
       for i in range(r):
          for j in range(c):
             if mat1[i][j] != mat2[i][j]:
                mark(i, j)
    
       islands = 0
       for i in range(r):
          for j in range(c):
             if mat1[i][j]:
                islands += 1
                mark(i, j)
       return islands
    
    mat1 = [
    [1, 0, 1],
    [1, 0, 0],
    [1, 0, 1]
    ]
    mat2 = [
    [1, 0, 1],
    [1, 0, 0],
    [1, 0, 0]
    ]
    print(solve(mat1, mat2))

    इनपुट

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

    आउटपुट

    2

    1. पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का कार्यक्रम

      मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें केवल तीन वर्ण X, (, और ) हैं। स्ट्रिंग में संतुलित कोष्ठक होते हैं और कुछ X के बीच में संभावित रूप से नेस्टेड कोष्ठक भी पुनरावर्ती रूप से हो सकते हैं। हमें s में कोष्ठक की प्रत्येक गहराई पर X की संख्या ज्ञात करनी है, जो सबसे कम गहराई से शुरू होकर सबसे गहर

    1. पायथन में n नोड्स के साथ BST की संख्या गिनने का कार्यक्रम

      मान लीजिए कि हमारे पास अलग-अलग नोड हैं। सभी अलग हैं। हमें यह पता लगाना है कि हम उन्हें कितने तरीकों से व्यवस्थित कर सकते हैं ताकि हम बाइनरी सर्च ट्री बना सकें। जैसा कि हम बाइनरी सर्च ट्री के बारे में जानते हैं, लेफ्ट सबट्री में हमेशा छोटे मान होते हैं और राइट सबट्री में बड़े मान होते हैं। इसे हल कर

    1. अजगर में मैट्रिक्स में घिरे द्वीपों की संख्या गिनने का कार्यक्रम

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