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

C++ में DAG के लिए रैंडम लीनियर एक्सटेंशन बनाना

यहां हम डायरेक्टेड एसाइक्लिक ग्राफ (DAG) के रैंडम लीनियर एक्सटेंशन बनाने का तरीका देखेंगे। लीनियर एक्सटेंशन मूल रूप से DAG की टोपोलॉजिकल सॉर्टिंग है। आइए मान लें कि ग्राफ नीचे जैसा है -

C++ में DAG के लिए रैंडम लीनियर एक्सटेंशन बनाना

डायरेक्टेड एसाइक्लिक ग्राफ के लिए टोपोलॉजिकल सॉर्टिंग वर्टेक्स की लीनियर ऑर्डरिंग है। डायरेक्टेड ग्राफ के प्रत्येक एज u-v के लिए, वर्टेक्स u ऑर्डरिंग में वर्टेक्स v से पहले आएगा।

जैसा कि हम जानते हैं कि सोर्स वर्टेक्स डेस्टिनेशन वर्टेक्स के बाद आएगा, इसलिए हमें पिछले एलिमेंट्स को स्टोर करने के लिए स्टैक का उपयोग करने की आवश्यकता है। सभी नोड्स पूरे होने के बाद, हम बस उन्हें स्टैक से प्रदर्शित कर सकते हैं।

इनपुट

000000
000000
000100
010000
110000
101000

आउटपुट

टोपोलॉजिकली सॉर्टेड ऑर्डर के बाद नोड्स - 5 4 2 3 1 0

एल्गोरिदम

topoSort(u, visited, stack)

इनपुट - प्रारंभ वर्टेक्स u, एक ऐरे जो ट्रैक रखता है कि कौन सा नोड विजिट किया गया है या नहीं। नोड्स स्टोर करने के लिए एक स्टैक।

आउटपुट - स्टैक में टोपोलॉजिकल क्रम में वर्टेक्स सॉर्ट करना।

Begin
    u को विजिटेड के रूप में चिह्नित करें
    u के साथ आसन्न सभी वर्टेक्स v के लिए, do
        यदि v विजिटेड नहीं है, तो
            topoSort(v, visited, stack)
        done
    u को स्टैक में पुश करें
End

performTopologicalSorting(Graph)

इनपुट - दिया गया डायरेक्टेड एसाइक्लिक ग्राफ।

आउटपुट - नोड्स का अनुक्रम।

Begin
    प्रारंभ में सभी नोड्स को अनविजिटेड चिह्नित करें
    ग्राफ के सभी नोड्स v के लिए, do
        यदि v विजिटेड नहीं है, तो
            topoSort(i, visited, stack)
        done
    स्टैक से सभी एलिमेंट्स पॉप और प्रिंट करें
End

उदाहरण

#include <iostream>
#include <stack>
#define NODE 6
using namespace std;

int graph[NODE][NODE] = {
    {0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0},
    {0, 0, 0, 1, 0, 0},
    {0, 1, 0, 0, 0, 0},
    {1, 1, 0, 0, 0, 0},
    {1, 0, 1, 0, 0, 0}
};

void topoSort(int u, bool visited[], stack<int> &stk) {
    visited[u] = true; // नोड v को विजिटेड के रूप में सेट करें
    for (int v = 0; v < NODE; v++) {
        if (graph[u][v]) { // u के आसन्न सभी वर्टेक्स v के लिए
            if (!visited[v])
                topoSort(v, visited, stk);
        }
    }
    stk.push(u); // प्रारंभिक वर्टेक्स को स्टैक में पुश करें
}

void performTopologicalSort() {
    stack<int> stk;
    bool vis[NODE];
    for (int i = 0; i < NODE; i++)
        vis[i] = false; // प्रारंभ में सभी नोड्स अनविजिटेड हैं
    for (int i = 0; i < NODE; i++)
        if (!vis[i]) // जब नोड विजिटेड नहीं है
            topoSort(i, vis, stk);
    while (!stk.empty()) {
        cout << stk.top() << " ";
        stk.pop();
    }
}

int main() {
    cout << "Nodes after topological sorted order: ";
    performTopologicalSort();
    return 0;
}

आउटपुट

Nodes after topological sorted order: 5 4 2 3 1 0
  1. C++ प्रोग्राम बाईसेक्शन मेथड के लिए C++ प्रोग्राम बाईसेक्शन मेथड के लिए

    फंक्शन f(x) दिया गया है जिसमें संख्या a और b हैं जहां, f(a) * f(b) > 0 और फंक्शन f(x) a और b के बीच होना चाहिए यानी f(x) = [a, b]। कार्य बाईसेक्शन मेथड का उपयोग करके फंक्शन f(x) में अंतराल a और b के बीच स्थित रूट का मान खोजना है।बाईसेक्शन मेथड क्या है?बाईसेक्शन मेथड का उपयोग फंक्शन f(x) में दिए ग

  1. C++ में पिरामिड के आयतन का प्रोग्राम C++ में पिरामिड के आयतन का प्रोग्राम

    पिरामिड के बेस के प्रकार के आधार पर भुजाएं दी गई हैं, कार्य पिरामिड का आयतन गणना करना है।पिरामिड एक 3-D आकृति है जिसकी बाहरी सतहें त्रिकोणीय हैं जो सामान्य बिंदु पर मिलती हैं जिससे पिरामिड का तीक्ष्ण किनारा बनता है। पिरामिड का आयतन उसके बेस के प्रकार पर निर्भर करता है।पिरामिड के बेस के विभिन्न प्रका

  1. C++ में क्विकसॉर्ट प्रोग्राम C++ में क्विकसॉर्ट प्रोग्राम

    क्विकसॉर्ट क्या है? क्विकसॉर्ट एक सॉर्टिंग तकनीक है जो अनसॉर्टेड सूची (सरणी) को सॉर्ट करने के लिए तुलनाओं का उपयोग करती है। क्विकसॉर्ट को पार्टीशन एक्सचेंज सॉर्ट के नाम से भी जाना जाता है। यह एक स्थिर सॉर्ट नहीं है, क्योंकि समान सॉर्ट आइटम्स का सापेक्ष क्रम संरक्षित नहीं रहता। क्विकसॉर्ट एक सरणी प