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

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


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

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

10000
10101
01101
00100
10000
11011

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

हल करने के चरण

  • dfs() फ़ंक्शन परिभाषित करें। यह i, j, k, l लेगा

    • mat[i, j] := 0

    • पेयर (i - k, j - l) को shape के अंत में डालें

    • यदि i + 1 < mat की पंक्तियों की संख्या और mat[i + 1, j] 1 है, तो dfs(i + 1, j, k, l)

    • यदि j + 1 < mat के स्तंभों की संख्या और mat[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)

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

    • cnt := 0

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

    • i के लिए 0 से mat की पंक्तियों की संख्या तक की रेंज में, करें

      • j के लिए 0 से mat के स्तंभों की संख्या तक की रेंज में, करें

        • यदि mat[i, j] 1 है, तो

          • shape := एक नई सूची

          • dfs(i, j, i, j)

          • यदि shape, shapes में नहीं है, तो cnt := cnt + 1

          • shape को shapes में डालें

    • cnt लौटाएं

    उदाहरण

    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 होगा। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: count := 0 जब तक n शून्येतर है, करें: count := count + (n AND 1) n := n/2 का फ्लोर count व

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

    मान लीजिए हमारे पास एक (n by n) मैट्रिक्स M है, हमें इसका ट्रांसपोज़ ढूंढना है। जैसा कि हम जानते हैं, मैट्रिक्स का ट्रांसपोज़ पंक्ति और स्तंभ इंडेक्स को स्विच करता है। अधिक औपचारिक रूप से, हर r और c के लिए, matrix[r][c] = matrix[c][r]। उदाहरण के लिए, यदि इनपुट है: 726 372 537 तो आउटपुट होगा:

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

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