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

पायथन में बाइनरी मैट्रिक्स में अधिकतम पथ लंबाई खोजें


इस समस्या में, हमें आकार m X n का एक वर्ग मैट्रिक्स mat[][] दिया जाता है जिसमें प्रत्येक एलिमेंट या तो 0 या 1 होता है। यदि किसी एलिमेंट का मान 1 है, तो इसका मतलब है कि यह जुड़ा हुआ है, यदि मान 0 है, तो इसका मतलब है कि यह जुड़ा हुआ नहीं है। हमारा कार्य बाइनरी मैट्रिक्स में अधिकतम पथ लंबाई खोजना है।

समस्या विवरण - समस्या को हल करने के लिए, हमें मैट्रिक्स पर सबसे बड़ी लंबाई का पथ खोजने की आवश्यकता है, जिसका अर्थ है मैट्रिक्स में सभी 1 एलिमेंट्स। पथ खोजने से पहले, हम अधिकतम एक 0 को 1 में बदलेंगे।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

mat[][] = {{1, 0}, {0, 1}}

आउटपुट

3

व्याख्या

हम इंडेक्स (0, 1) या (1, 0) पर 0 को 1 में बदलकर पथ लंबाई को अधिकतम कर सकते हैं।

समाधान दृष्टिकोण

समस्या का एक सरल समाधान प्रत्येक 0 को 1 में बदलने के बाद लंबाई खोजना है। हम पथ की लंबाई खोजने के लिए डेप्थ-फर्स्ट सर्च का उपयोग करेंगे और फिर सभी पथ लंबाई में से अधिकतम लौटाएंगे।

एक कुशल समाधान कई रूपांतरण करने की आवश्यकता को समाप्त करेगा और उस एक के लिए समझौता करेगा जो सबसे आशाजनक समाधान देता है। हम एक ऐसा समूह ढूंढेंगे जहां एक 0 को 1 में बदलने से सबसे बड़ी लंबाई का पथ वापस मिलेगा।

हमारे समाधान के काम को दिखाने वाला प्रोग्राम,

उदाहरण

def FindNeighbor(R, C, N):
    for nr, nc in (((R - 1), C), ((R + 1), C), (R, (C - 1)), (R, (C + 1))):
        if 0 <= nr < N and 0 <= nc < N:
            yield nr, nc

def DFSTraversal(R, C, index, mat, N):
    maxLen = 1
    mat[R][C] = index
    for nr, nc in FindNeighbor(R, C, N):
        if mat[nr][nc] == 1:
            maxLen += DFSTraversal(nr, nc, index)
    return maxLen

def findLargestPath(mat):
    N = len(mat)
    maxPath = {}
    index = 2
    for i in range(N):
        for j in range(N):
            if mat[i][j] == 1:
                maxPath[index] = DFSTraversal(i, j, index, mat, N)
                index += 1
    maxPathLen = max(maxPath.values() or [0])
    for i in range(N):
        for j in range(N):
            if mat[i][j] == 0:
                seen = {mat[nr][nc] for nr, nc in FindNeighbor(i, j, N) if mat[nr][nc] > 1}
                maxPathLen = max(maxPathLen, 1 + sum(maxPath[i] for i in seen))
    return maxPathLen

I = [[1, 0], [0, 1]]
print("सबसे बड़े पथ की लंबाई है " + str(findLargestPath(I)))

आउटपुट

सबसे बड़े पथ की लंबाई है 3

  1. बाइनरी ट्री में सबसे लंबे वैकल्पिक पथ की लंबाई ज्ञात करने का पायथन प्रोग्राम बाइनरी ट्री में सबसे लंबे वैकल्पिक पथ की लंबाई ज्ञात करने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें सबसे लंबे पथ की लंबाई ढूंढनी है जो बाएं और दाएं चाइल्ड के बीच वैकल्पिक होता है और नीचे की ओर जाता है। उदाहरण के लिए, यदि इनपुट इस तरह है: तो आउटपुट 5 होगा क्योंकि वैकल्पिक पथ है [2, 4, 5, 7, 8]। इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे: यदि roo

  1. पायथन में बाइनरी ट्री की अधिकतम चौड़ाई खोजने का प्रोग्राम पायथन में बाइनरी ट्री की अधिकतम चौड़ाई खोजने का प्रोग्राम

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

  1. Python में बाइनरी ट्री अधिकतम पथ योग Python में बाइनरी ट्री अधिकतम पथ योग

    मान लीजिए हमारे पास एक गैर-खाली बाइनरी ट्री है। हमें पथ योग ढूंढना है। तो यहां, एक पथ कुछ प्रारंभिक नोड से किसी भी नोड तक नोड्स का कोई अनुक्रम है जहां पैरेंट-चाइल्ड कनेक्शन मौजूद हैं। पथ में कम से कम एक नोड होना चाहिए और रूट नोड से गुजरने की आवश्यकता नहीं है। इसलिए यदि इनपुट ट्री है −यहां आउटपुट 32