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

पायथन में जांचें कि क्या हम वर्ग को भर सकते हैं जहां प्रत्येक पंक्ति और स्तंभ में विशिष्ट तत्व हों


मान लीजिए हमारे पास एक n×n मैट्रिक्स है जिसमें 0 से n तक के मान हैं। यहां 0 एक अनभरा सेल दर्शाता है। हमें जांचना है कि क्या हम खाली सेल भर सकते हैं ताकि प्रत्येक पंक्ति और प्रत्येक स्तंभ में 1 से n तक की हर संख्या ठीक एक बार आए।

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

002
201
123

तो आउटपुट True होगा, क्योंकि हम मैट्रिक्स को इस प्रकार भर सकते हैं:

312
231
123

इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे (बैकट्रैकिंग):

  • find_empty_cell(matrix, n) फ़ंक्शन परिभाषित करें जो पहला खाली सेल (0) ढूंढता है।

  • is_feasible(matrix, i, j, x) फ़ंक्शन परिभाषित करें जो जांचता है कि क्या x को (i,j) पर रखना मान्य है (पंक्ति और स्तंभ में डुप्लिकेट नहीं)।

  • is_complete(matrix, n) फ़ंक्शन परिभाषित करें जो जांचता है कि क्या मैट्रिक्स पूरी तरह भरा है और प्रत्येक पंक्ति/स्तंभ में 1 से n तक सभी संख्याएं हैं।

  • मुख्य विधि से:

    • n := len(matrix)।

    • (i, j) = find_empty_cell(matrix, n)।

    • यदि (i, j) == (-1, -1) (कोई खाली सेल नहीं):

      • यदि is_complete(matrix, n) सत्य है तो True लौटाएं, अन्यथा False।

    • x को 1 से n तक लूप में चलाएं:

      • यदि is_feasible(matrix, i, j, x) सत्य है:

        • matrix[i][j] = x।

        • यदि solve(matrix) रिकर्सिवली सत्य लौटाता है, तो True लौटाएं।

        • matrix[i][j] = 0 (बैकट्रैक)।

    • False लौटाएं।

उदाहरण

class Solution:    def solve(self, matrix):       n = len(matrix)       def find_empty_cell(matrix, n):          for i in range(n):             for j in range(n):                if matrix[i][j] == 0:                   return (i, j)          return (-1, -1)       def is_feasible(matrix, i, j, x):          if x in matrix[i]:             return False          if x in [row[j] for row in matrix]:             return False          return True       def is_complete(matrix, n):          for row in matrix:             if set(row) != set(range(1, n + 1)):                return False          for col in range(n):             if set(row[col] for row in matrix) != set(range(1, n + 1)):                return False          return True       (i, j) = find_empty_cell(matrix, n)       if (i, j) == (-1, -1):          if is_complete(matrix, n):             return True          else:             return False       for x in range(1, n + 1):          if is_feasible(matrix, i, j, x):             matrix[i][j] = x             if self.solve(matrix):                return True             matrix[i][j] = 0       return False ob = Solution() matrix = [    [0, 0, 2],    [2, 0, 1],    [1, 2, 3] ] print(ob.solve(matrix))

इनपुट

matrix = [ [0, 0, 2], [2, 0, 1], [1, 2, 3] ]

आउटपुट

True

  1. बाइनरी ट्री को रंगने की संभावना जांचने का पायथन प्रोग्राम जहां कोई आसन्न नोड्स समान रंग के न हों बाइनरी ट्री को रंगने की संभावना जांचने का पायथन प्रोग्राम जहां कोई आसन्न नोड्स समान रंग के न हों

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

  1. - पायथन में जांचें कि दिया गया मैट्रिक्स टॉपलिट्ज़ मैट्रिक्स है या नहीं

    मान लीजिए हमारे पास एक मैट्रिक्स M है, हमें जांचना है कि क्या यह टॉपलिट्ज़ मैट्रिक्स है या नहीं। जैसा कि हम जानते हैं, एक मैट्रिक्स को टॉपलिट्ज़ कहा जाता है जब बाएं से दाएं नीचे जाने वाला प्रत्येक विकर्ण समान मान रखता है। उदाहरण के लिए, यदि इनपुट है: 726 372 537 तो आउटपुट होगा True। हल करने के

  1. - पायथन में पंक्ति और स्तंभ-वार क्रमबद्ध मैट्रिक्स से सभी तत्वों को क्रमबद्ध क्रम में प्रिंट करें

    कभी-कभी हमें मैट्रिक्स के सभी तत्वों को क्रमबद्ध क्रम में चाहिए होता है। लेकिन चूंकि मैट्रिक्स पंक्तियों और स्तंभों के रूप में होता है, हम सामान्य क्रमबद्ध एल्गोरिदम लागू करके परिणाम प्राप्त नहीं करते। बल्कि हम नीचे दिए गए उपयोगकर्ता-परिभाषित फ़ंक्शन का उपयोग करके तत्वों को क्रमबद्ध करते हैं। उदाहरण