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

पायथन में यूलर सर्किट बनाने के लिए आवश्यक न्यूनतम एज खोजें


मान लीजिए हमारे पास b नोड्स और a एज का एक अनिर्देशित ग्राफ है। हमें इस ग्राफ में यूलर सर्किट बनाने के लिए आवश्यक न्यूनतम एज ढूंढनी है।

इसलिए, यदि इनपुट इस तरह है:

पायथन में यूलर सर्किट बनाने के लिए आवश्यक न्यूनतम एज खोजें

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

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

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

  • dfs(g, visit, odd_vert, degree, comp, v) फ़ंक्शन परिभाषित करें:
    • visit[v] := 1
    • यदि degree[v] % 2 == 1, तो odd_vert[comp] := odd_vert[comp] + 1
    • u को 0 से len(g[v])-1 तक के लिए:
      • यदि visit[u] == 0, तो dfs(g, visit, odd_vert, degree, comp, u)
  • मुख्य विधि से:
    • g := [ [] for _ in range(n+1) ]
    • e := [], o := []
    • degree := [0] * (n + 1)
    • visit := [0] * (n + 1)
    • odd_vert := [0] * (n + 1)
    • i को 0 से m-1 तक के लिए:
      • g[s[i]].append(d[i])
      • g[d[i]].append(s[i])
      • degree[s[i]] += 1
      • degree[d[i]] += 1
    • ans := 0, comp := 0
    • i को 1 से n तक के लिए:
      • यदि visit[i] == 0:
        • comp += 1
        • dfs(g, visit, odd_vert, degree, comp, i)
        • यदि odd_vert[comp] == 0, तो e.append(comp)
        • अन्यथा, o.append(comp)
    • यदि len(o) == 0 और len(e) == 1, तो 0 लौटाएं।
    • यदि len(o) == 0, तो len(e) लौटाएं।
    • यदि len(e) != 0, तो ans += len(e)
    • i को 0 से len(o)-1 तक: ans += odd_vert[i] // 2
    • ans लौटाएं।

उदाहरण

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

def dfs(g, visit, odd_vert, degree, comp, v):
    visit[v] = 1
    if degree[v] % 2 == 1:
        odd_vert[comp] += 1
    for u in range(len(g[v])):
        if visit[u] == 0:
            dfs(g, visit, odd_vert, degree, comp, u)

def solve(n, m, s, d):
    g = [[] for i in range(n + 1)]
    e = []
    o = []
    degree = [0] * (n + 1)
    visit = [0] * (n + 1)
    odd_vert = [0] * (n + 1)
    for i in range(m):
        g[s[i]].append(d[i])
        g[d[i]].append(s[i])
        degree[s[i]] += 1
        degree[d[i]] += 1
    ans = 0
    comp = 0
    for i in range(1, n + 1):
        if visit[i] == 0:
            comp += 1
            dfs(g, visit, odd_vert, degree, comp, i)
            if odd_vert[comp] == 0:
                e.append(comp)
            else:
                o.append(comp)
    if len(o) == 0 and len(e) == 1:
        return 0
    if len(o) == 0:
        return len(e)
    if len(e) != 0:
        ans += len(e)
    for i in range(len(o)):
        ans += odd_vert[i] // 2
    return ans

b = 3
a = 2
source = [1, 2]
destination = [2, 3]
print(solve(b, a, source, destination))

इनपुट

b = 3, a = 2, source = [1, 2], destination = [2, 3]

आउटपुट

1
  1. - पायथन में दो स्ट्रिंग्स को बराबर बनाने के लिए आवश्यक न्यूनतम प्रीप्रोसेसिंग चालें खोजें

    मान लीजिए हमारे पास केवल निचले मामले के अक्षरों वाली समान लंबाई की दो स्ट्रिंग्स P और Q हैं, हमें स्ट्रिंग P पर आवश्यक न्यूनतम प्री-प्रोसेसिंग चालों की गिनती करनी है ताकि नीचे दिए गए ऑपरेशंस लागू करने के बाद यह स्ट्रिंग Q के बराबर हो जाए:कोई भी इंडेक्स i चुनें और वर्ण pi और qi को स्वैप करें।कोई भी इ

  1. - पायथन में set add() मेथड

    इस ट्यूटोरियल में, हम सेट डेटा संरचना के add मेथड के बारे में जानेंगे। आइए ट्यूटोरियल में गोता लगाएं।सेट डेटा संरचना इसमें अद्वितीय तत्वों को संग्रहीत करती है। सेट डेटा संरचना का add मेथड एक तत्व लेता है और इसे सेट में जोड़ता है।सेट में एक नया तत्व जोड़ने के लिए नीचे दिए गए चरणों का पालन करें।एक सेट

  1. - पायथन में पैरेंथेसिस को वैध बनाने के लिए न्यूनतम जोड़

    मान लीजिए हमारे पास ( और ) पैरेंथेसिस की एक स्ट्रिंग S है, हम किसी भी स्थिति पर न्यूनतम संख्या में पैरेंथेसिस जोड़ते हैं, ताकि परिणामी पैरेंथेसिस स्ट्रिंग वैध हो। एक पैरेंथेसिस स्ट्रिंग तभी वैध होती है जब - यह खाली स्ट्रिंग है इसे XY के रूप में लिखा जा सकता है (X को Y के साथ जोड़ा गया), जहां X और Y