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

Python में दो मैप्स में ओवरलैपिंग द्वीपों की संख्या गिनने का प्रोग्राम

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

इसलिए, यदि इनपुट है mat1 = [[1,0,1],[1,0,0],[1,0,0]] और mat2 = [[1,0,1],[1,0,0],[1,0,1]] तो आउटपुट 2 होगा, क्योंकि ओवरलैपिंग द्वीप हैं:

हल करने का दृष्टिकोण

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

उदाहरण

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. पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का प्रोग्राम पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का प्रोग्राम

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

  1. पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की सूची है। हमारे पास x नामक एक और संख्या भी है। हमें nums से उन सभी नंबरों को फ़िल्टर करके ढूंढना है जो x से कम हैं। पायथन में filter() मेथड होता है जो फंक्शन को आर्गुमेंट के रूप में लेता है और इस फंक्शन का उपयोग करके फ़िल्टर करता है। तो, यदि इनपुट nums = [1,5

  1. मैट्रिक्स में पूरी तरह से घिरे हुए द्वीपों की संख्या गिनने का पायथन प्रोग्राम मैट्रिक्स में पूरी तरह से घिरे हुए द्वीपों की संख्या गिनने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है। जहां 1 भूमि दर्शाता है और 0 पानी दर्शाता है। जैसा कि हम जानते हैं एक द्वीप 1 का समूह है जो एक साथ जुड़े हुए हैं जिसकी परिधि पानी से घिरी हुई है। हमें पूरी तरह से घिरे हुए द्वीपों की संख्या ढूंढनी है। उदाहरण के लिए, यदि इनपुट इस तरह है: तो आउटपुट 2 होगा,