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

8-पज़ल को हल करने के चरणों की संख्या ज्ञात करने का पायथन प्रोग्राम


मान लीजिए हमारे पास एक 3x3 बोर्ड है जहां सभी संख्याएं 0 से 8 की रेंज में हैं और कोई दोहराव नहीं है। अब हम 0 को उसके 4 पड़ोसियों में से किसी एक के साथ स्वैप कर सकते हैं, और हम इसे हल करके सभी व्यवस्थित क्रम प्राप्त करने की कोशिश कर रहे हैं, हमें लक्ष्य तक पहुंचने के लिए आवश्यक न्यूनतम चरणों की संख्या ढूंढनी है।

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

3
1
2
4
7
5
6
8
0

तो आउटपुट 4 होगा।

8-पज़ल को हल करने के चरणों की संख्या ज्ञात करने का पायथन प्रोग्राम

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

  • एक फ़ंक्शन find_next() परिभाषित करें। यह node लेगा
  • moves := एक मैप जो प्रत्येक मान के लिए चालों को सूची के रूप में परिभाषित करता है {0: [1, 3], 1: [0, 2, 4], 2: [1, 5], 3: [0, 4, 6], 4: [1, 3, 5, 7], 5: [2, 4, 8], 6: [3, 7], 7: [4, 6, 8], 8: [5, 7]}
  • results := एक नई सूची
  • pos_0 := node का पहला मान
  • प्रत्येक move के लिए moves[pos_0] में, करें
    • new_node := node से एक नई सूची
    • new_node[move] और new_node[pos_0] को स्वैप करें
    • results के अंत में new_node से एक नया टुपल डालें
  • results लौटाएं
  • एक फ़ंक्शन get_paths() परिभाषित करें। यह dict लेगा
  • cnt := 0
  • अनंत काल तक निम्न करें
    • current_nodes := एक सूची जहां मान cnt के समान है
    • यदि current_nodes का आकार 0 के समान है, तो
      • -1 लौटाएं
    • प्रत्येक node के लिए current_nodes में, करें
      • next_moves := find_next(node)
      • प्रत्येक move के लिए next_moves में, करें
        • यदि move dict में मौजूद नहीं है, तो
          • dict[move] := cnt + 1
        • यदि move (0, 1, 2, 3, 4, 5, 6, 7, 8) के समान है, तो
          • cnt + 1 लौटाएं
        • cnt := cnt + 1
  • मुख्य विधि से निम्न करें:
  • dict := एक नया मैप, flatten := एक नई सूची
  • i को 0 से बोर्ड की पंक्ति संख्या तक के लिए, करें
    • flatten := flatten + board[i]
  • flatten := flatten की एक प्रति
  • dict[flatten] := 0
  • यदि flatten (0, 1, 2, 3, 4, 5, 6, 7, 8) के समान है, तो
    • 0 लौटाएं
  • get_paths(dict) लौटाएं

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

उदाहरण

class Solution:
    def solve(self, board):
        dict = {}
        flatten = []
        for i in range(len(board)):
            flatten += board[i]
        flatten = tuple(flatten)
        dict[flatten] = 0
        if flatten == (0, 1, 2, 3, 4, 5, 6, 7, 8):
            return 0
        return self.get_paths(dict)

    def get_paths(self, dict):
        cnt = 0
        while True:
            current_nodes = [x for x in dict if dict[x] == cnt]
            if len(current_nodes) == 0:
                return -1
            for node in current_nodes:
                next_moves = self.find_next(node)
                for move in next_moves:
                    if move not in dict:
                        dict[move] = cnt + 1
                    if move == (0, 1, 2, 3, 4, 5, 6, 7, 8):
                        return cnt + 1
            cnt += 1

    def find_next(self, node):
        moves = {
            0: [1, 3],
            1: [0, 2, 4],
            2: [1, 5],
            3: [0, 4, 6],
            4: [1, 3, 5, 7],
            5: [2, 4, 8],
            6: [3, 7],
            7: [4, 6, 8],
            8: [5, 7],
        }
        results = []
        pos_0 = node.index(0)
        for move in moves[pos_0]:
            new_node = list(node)
            new_node[move], new_node[pos_0] = new_node[pos_0], new_node[move]
            results.append(tuple(new_node))
        return results

ob = Solution()
matrix = [
    [3, 1, 2],
    [4, 7, 5],
    [6, 8, 0]
]
print(ob.solve(matrix))

इनपुट

matrix = [
    [3, 1, 2],
    [4, 7, 5],
    [6, 8, 0]
]

आउटपुट

4

  1. पायथन में BST में रेंज में नोड्स की संख्या खोजने का प्रोग्राम पायथन में BST में रेंज में नोड्स की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक BST है, और हमारे पास बाएं और दाएं बाउंड l और r भी हैं, हमें रूट में उन सभी नोड्स की संख्या गिननी है जिनके मान l और r के बीच हैं (सम्मिलित)। उदाहरण के लिए, यदि इनपुट जैसा है: l = 7, r = 13, तो आउटपुट 3 होगा, क्योंकि तीन नोड्स हैं: 8, 10, 12। इसे हल करने के लिए हम निम्न चरणों

  1. Python प्रोग्राम से सूची में सबसे छोटी संख्या खोजना Python प्रोग्राम से सूची में सबसे छोटी संख्या खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें सूची में उपलब्ध सबसे छोटी संख्या प्रदर्शित करने की आवश्यकता है। यहां हम या तो सूची को क्रमबद्ध करके सबसे छोटा तत्व प्राप्त कर सकते हैं या बिल्ट-इन min() फ़ंक्शन का उपयोग करके सबसे छोटा तत्

  1. पायथन प्रोग्राम: किसी संख्या के सम गुणनखंडों का योग ज्ञात करें पायथन प्रोग्राम: किसी संख्या के सम गुणनखंडों का योग ज्ञात करें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक संख्या दी गई है, हमें उस संख्या के सभी सम गुणनखंडों का योग प्रदर्शित करना है। दृष्टिकोण हम जांचते हैं कि क्या संख्या विषम है, तो कोई सम गुणनखंड नहीं हैं, इसलिए 0 वापस करें। यदि संख्या सम है, तो हम गणना के माध्यम से जाते हैं