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

C++ में अनवेटेड ग्राफ के लिए ट्रैवलिंग सेल्समैन प्रॉब्लम हल करना

ट्रैवलिंग सेल्समैन प्रॉब्लम का उपयोग सभी शहरों को कवर करने और मूल शहर पर वापस आने के लिए सबसे छोटे मार्ग की गणना के लिए किया जाता है। इस विधि का उपयोग ग्राफ के सभी नोड्स को कवर करने के लिए सबसे छोटा पथ खोजने के लिए किया जाता है।

यह अनवेटेड ग्राफ के सबसे छोटे मार्ग को खोजने का प्रोग्राम है।

एल्गोरिदम

Begin
    vr = 4 वेरिएबल को वैश्विक रूप से परिभाषित करें
    TSP इंटीजर फंक्शन घोषित करें ट्रैवलिंग सेल्समैन प्रॉब्लम लागू करने के लिए
    grph[][] को 2D मैट्रिक्स और p वेरिएबल को इंटीजर डेटाटाइप के रूप में घोषित करें
    उन्हें पैरामीटर के रूप में पास करें
    ver वेरिएबल को वेक्टर डेटाटाइप के रूप में घोषित करें
    for (int i = 0; i < vr; i++)
        if (i != p) then
            push_back(i) फंक्शन कॉल करें सोर्स वर्टेक्स को छोड़कर सभी वर्टेक्स का मान स्टोर करने के लिए
        m_p = INT_MAX इनिशियलाइज़ करें ग्राफ के न्यूनतम वजन को स्टोर करने के लिए
        do
            cur_pth, k को इंटीजर डेटाटाइप के रूप में घोषित करें
            cur_pth = 0 इनिशियलाइज़ करें
            k = p इनिशियलाइज़ करें
            for (int i = 0; i < ver.size(); i++)
                cur_pth += grph[k][ver[i]]
                k = ver[i]
            cur_pth += grph[k][p]
            m_p = min(m_p, cur_pth) न्यूनतम वजन का मान अपडेट करने के लिए
        while (next_permutation(ver.begin(), ver.end()))
        return m_p
    
    grph[][] को इंटीजर डेटाटाइप के 2D मैट्रिक्स के रूप में घोषित करें
        grph[][] ग्राफ के मान इनिशियलाइज़ करें
    p वेरिएबल को इंटीजर डेटाटाइप के रूप में घोषित करें
        p = 0 इनिशियलाइज़ करें
    "The result is: " प्रिंट करें
    TSP() फंक्शन का रिटर्न मान प्रिंट करें
End

उदाहरण

#include <bits/stdc++.h>
using namespace std;

#define vr 4

int TSP(int grph[][vr], int p) { // ट्रैवलिंग सेल्समैन प्रॉब्लम लागू करें
    vector<int> ver;
    for (int i = 0; i < vr; i++)
        if (i != p)
            ver.push_back(i);
    
    int m_p = INT_MAX; // ग्राफ के न्यूनतम वजन को स्टोर करें
    do {
        int cur_pth = 0;
        int k = p;
        for (int i = 0; i < ver.size(); i++) {
            cur_pth += grph[k][ver[i]];
            k = ver[i];
        }
        cur_pth += grph[k][p];
        m_p = min(m_p, cur_pth); // न्यूनतम वजन का मान अपडेट करें
    } while (next_permutation(ver.begin(), ver.end()));
    return m_p;
}

int main() {
    int grph[][vr] = { { 0, 5, 10, 15 }, // मैट्रिक्स के रूप में ग्राफ के मान
                       { 5, 0, 20, 30 },
                       { 10, 20, 0, 35 },
                       { 15, 30, 35, 0 }
                     };
    int p = 0;
    cout << "\nThe result is: " << TSP(grph, p) << endl;
    return 0;
}

आउटपुट

The result is: 75
  1. C++ में डिस्कनेक्टेड ग्राफ के लिए BFS C++ में डिस्कनेक्टेड ग्राफ के लिए BFS

    डिस्कनेक्टेड ग्राफ एक ग्राफ है जिसमें एक या अधिक नोड्स ग्राफ के एंडपॉइंट्स नहीं होते यानी वे कनेक्टेड नहीं होते। एक डिस्कनेक्टेड ग्राफ... अब, सिंपल BFS केवल तब लागू होता है जब ग्राफ कनेक्टेड हो यानी ग्राफ के सभी वर्टेक्स ग्राफ के एक नोड से एक्सेसिबल हों। उपरोक्त डिस्कनेक्टेड ग्राफ में तकनीक संभव नह

  1. C++ में सरणी के एलिमेंट्स का गुणनफल C++ में सरणी के एलिमेंट्स का गुणनफल

    पूर्णांक एलिमेंट्स की एक सरणी दी गई है और कार्य सरणी के एलिमेंट्स को गुणा करना और प्रदर्शित करना है। उदाहरण इनपुट-: arr[]={1,2,3,4,5,6,7} आउटपुट-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 इनपुट-: arr[]={3, 4,6, 2, 7, 8, 4} आउटपुट-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 नीचे दिए गए प्रोग्राम में उपयोग किया गया द

  1. C++ में ऑक्टल से डेसिमल रूपांतरण C++ में ऑक्टल से डेसिमल रूपांतरण

    एक ऑक्टल संख्या इनपुट के रूप में दी गई है, कार्य दी गई ऑक्टल संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में डेसिमल संख्याओं को आधार 10 के साथ दर्शाया जाता है और ऑक्टल संख्या को आधार 8 के साथ दर्शाया जाता है जो अंक 0 से 7 तक होती है जबकि डेसिमल संख्याएं 0-9 से शुरू होने वाला कोई भी संख्यात्मक अंक