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

टारगेट को धारण करने वाले सबसे छोटे चक्र की लंबाई ज्ञात करने का पायथन प्रोग्राम


मान लीजिए हमारे पास एक निर्देशित ग्राफ की आसन्न सूची है, जहां इंडेक्स i पर प्रत्येक सूची नोड i से जुड़े नोड्स को दर्शाती है। हमारे पास एक टारगेट मान भी है। हमें उस सबसे छोटे चक्र की लंबाई ढूंढनी है जिसमें टारगेट शामिल है। यदि कोई समाधान नहीं है तो -1 लौटाएं।

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

टारगेट को धारण करने वाले सबसे छोटे चक्र की लंबाई ज्ञात करने का पायथन प्रोग्राम

target = 3, तो आउटपुट 3 होगा, क्योंकि चक्र नोड्स 1 → 2 → 3 → 1 है। ध्यान दें कि एक और चक्र 0 → 1 → 2 → 3 → 0 है, लेकिन यह सबसे छोटा नहीं है।

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

  • visited := एक नया सेट
  • l := target तत्व के साथ एक सूची
  • length := 0
  • जब तक l खाली नहीं है, करें
    • length := length + 1
    • nl := एक नई सूची
    • प्रत्येक u के लिए l में, करें
      • प्रत्येक v के लिए graph[u] में, करें
        • यदि v, target के समान है, तो
          • length लौटाएं
        • यदि v विज़िटेड है, तो
          • अगली पुनरावृत्ति के लिए जाएं
        • v को विज़िटेड के रूप में चिह्नित करें
        • v को nl के अंत में डालें
    • l := nl
  • -1 लौटाएं

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

उदाहरण

class Solution:
    def solve(self, graph, target):
        visited = set()
        l = [target]
        length = 0
        while l:
            length += 1
            nl = []
            for u in l:
                for v in graph[u]:
                    if v == target:
                        return length
                    if v in visited:
                        continue
                    visited.add(v)
                    nl.append(v)
            l = nl
        return -1

ob = Solution()
graph = [[1, 4], [2], [3], [0, 1], []]
target = 3
print(ob.solve(graph, target))

इनपुट

[[1, 4], [2], [3], [0, 1], []]

आउटपुट

3

  1. - पायथन में सबसे लंबे लगातार अनुक्रम की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक असॉर्टेड सरणी है, हमें लगातार तत्वों के सबसे लंबे अनुक्रम की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट nums = [70, 7, 50, 4, 6, 5] है, तो आउटपुट 4 होगा, क्योंकि सबसे लंबा लगातार अनुक्रम [4, 5, 6, 7] है, इसलिए हम इसकी लंबाई 4 लौटाते हैं। इसे हल करने के लिए हम निम्न चरणों का पाल

  1. - पायथन में सबसे लंबी एनाग्राम उप-अनुक्रम की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो लोअरकेस स्ट्रिंग्स S और T हैं, हमें सबसे लंबी एनाग्राम उप-अनुक्रम की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट S = helloworld, T = hellorld है, तो आउटपुट 8 होगा। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: c := एक नया मैप, d := एक नया मैप। i को 0 से len(a) - 1 तक लूप म

  1. - पायथन में सबसे लंबे संतुलित उप-अनुक्रम की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है जिसमें ब्रैकेट्स ( और ) हैं, हमें संतुलित ब्रैकेट्स के सबसे लंबे उप-अनुक्रम की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट s = ())(()( है, तो आउटपुट 4 होगा, क्योंकि हम ()() जैसा उप-अनुक्रम ले सकते हैं। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: res := 0, n