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

पायथन का उपयोग करके बाइनरी ग्रिड की व्यवस्था करने के लिए न्यूनतम स्वैप खोजने का कार्यक्रम

मान लीजिए कि हमारे पास एक n x n बाइनरी मैट्रिक्स है। हम इस पर एक ऑपरेशन कर सकते हैं जैसे, एक चरण में हम दो आसन्न पंक्तियों का चयन करते हैं और उन्हें स्वैप करते हैं। हमें आवश्यक न्यूनतम स्वैप की संख्या गिननी होगी, ताकि मैट्रिक्स के प्रमुख विकर्ण के ऊपर सभी नोड्स 0 हों। यदि ऐसा कोई समाधान नहीं है, तो -1 लौटाएं।

तो, अगर इनपुट पसंद है

0 1 0
0 1 1
1 0 0

तो आउटपुट 2 होगा क्योंकि -

पायथन का उपयोग करके बाइनरी ग्रिड की व्यवस्था करने के लिए न्यूनतम स्वैप खोजने का कार्यक्रम

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

  • n :=मैट्रिक्स की पंक्ति गणना

  • m :=आकार n की एक सरणी बनाएं और n से भरें

  • मैं के लिए 0 से n -1 की सीमा में, करो

    • j के लिए n-1 से 0 की सीमा में, 1 से घटाएं, करें

      • यदि मैट्रिक्स [i, j] 1 के समान है, तो

        • मी[i] :=n-j-1

        • लूप से बाहर आएं

  • टी:=0, उत्तर:=0

  • मैं के लिए 0 से n -1 की सीमा में, करो

    • टी:=टी + 1

    • झंडा :=झूठा

    • j के लिए I से n-1 की श्रेणी में, करें

      • अगर m[j]>=n-t, तो

        • उत्तर:=उत्तर + जे-आई

        • झंडा :=सच

        • लूप से बाहर आएं

    • अगर झंडा झूठा है, तो

      • वापसी -1

    • m[index i+1 to j] by m[index i to j-1]

      . को अपडेट करें
  • वापसी उत्तर

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

उदाहरण

def solve(matrix):
   n = len(matrix)
   m = [n] * n
   for i in range(n):
      for j in range(n-1,-1,-1):
         if matrix[i][j] == 1:
            m[i] = n-j-1
            break
   t,ans = 0,0
   for i in range(n):
      t += 1
      flag = False
      for j in range(i,n):
         if m[j] >= n-t:
            ans += j-i
            flag = True
            break
      if not flag: return -1
      m[i+1:j+1] = m[i:j]
   return ans
matrix = [[0,1,0],[0,1,1],[1,0,0]]
print(solve(matrix))

इनपुट

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

आउटपुट

2

  1. पायथन का उपयोग करके बाइनरी ट्री में दाईं ओर नोड का पता लगाने का कार्यक्रम

    मान लीजिए, हमें एक बाइनरी ट्री प्रदान किया जाता है। हमें एक नोड (u नाम दिया गया) के लिए एक पॉइंटर भी दिया जाता है और हमें दिए गए नोड के ठीक दाईं ओर स्थित नोड को खोजना होता है। दिए गए नोड के दाईं ओर स्थित नोड समान स्तर पर रहना चाहिए और दिया गया नोड या तो लीफ नोड या आंतरिक नोड हो सकता है। तो, अगर इनप

  1. पायथन का उपयोग करके लक्ष्य सरणी बनाने के लिए न्यूनतम संख्या में फ़ंक्शन कॉल खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास निम्नलिखित फ़ंक्शन परिभाषा है: def modify(arr, op, index):    if op == 0:       arr[index] += 1    if op == 1:       for i in range(len(arr)):          arr[i] *=2 हमें किसी दिए गए सरणी संख्या को समान आ

  1. पायथन का उपयोग करके सभी नोड्स तक पहुंचने के लिए न्यूनतम संख्या में कोने खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित चक्रीय ग्राफ है, जिसमें n कोने हैं और नोड्स 0 से n-1 तक गिने जाते हैं, ग्राफ को किनारे की सूची द्वारा दर्शाया जाता है, जहां किनारों [i] =(यू, वी) नोड यू से एक निर्देशित किनारे का प्रतिनिधित्व करता है। नोड वी। हमें शिखर का सबसे छोटा सेट ढूंढना है जिससे ग्राफ में सभ