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

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

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

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

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

इनपुट

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

आउटपुट

3

स्पष्टीकरण

We can convert 0 at index (0, 1) or (1, 0) to maximise the path length.

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

समस्या का एक सरल समाधान यह है कि प्रत्येक 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("The length of largest path is " + str(findLargestPath(I)))

आउटपुट

The length of largest path is 3

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

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

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

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

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

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