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

C प्रोग्राम में CLRS के एल्गोरिदम के अनुसार वैक्टर और क्यू का उपयोग करके BFS


परिचय

CLRS पुस्तक में BFS एल्गोरिदम को वैक्टर और क्यू का उपयोग करके वर्णित किया गया है। हमें C++ STL का उपयोग करके उस एल्गोरिदम को लागू करना है।

एल्गोरिदम

BFS(G, s)
शुरुआत
    G.V - {s} में प्रत्येक शीर्ष u के लिए
        u.color := white
        u.d := infinity
        u.p := NIL
    s.color := green
    s.d := 0
    s.p := NIL
    Q := NULL
    s को Q में डालें
    जब तक Q null नहीं है
        u = Q से हटाएं
        u से सटे प्रत्येक v के लिए
            यदि v.color = white
                v.color := green
                v.d := u.d + 1
                v.p := u
                v को Q में डालें
            अंत यदि
        अंत
        u.color = dark_green
    अंत
अंत

C++ प्रोग्राम उदाहरण

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

vector colour;
vector dist;
vector par;

void addEdge(vector g[], int u, int v) {
    g[u].push_back(v);
    g[v].push_back(u);
}

void BFS(vector g[], int s) {
    queue q;
    q.push(s);
    dist[s] = 0;
    colour[s] = "gray";
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        cout << u << " ";
        for (auto i = g[u].begin(); i != g[u].end(); i++) {
            if (colour[*i] == "white") {
                colour[*i] = "gray";
                dist[*i] = dist[u] + 1;
                par[*i] = u;
                q.push(*i);
            }
        }
        colour[u] = "black";
    }
}

void BFSAlgo(vector g[], int n) {
    colour.assign(n, "white");
    dist.assign(n, 0);
    par.assign(n, -1);
    for (int i = 0; i < n; i++)
        if (colour[i] == "white")
            BFS(g, i);
}

int main() {
    int n = 7;
    vector g[n];
    addEdge(g, 0, 1);
    addEdge(g, 0, 2);
    addEdge(g, 1, 3);
    addEdge(g, 1, 4);
    addEdge(g, 2, 5);
    addEdge(g, 2, 6);
    BFSAlgo(g, n);
}

आउटपुट

0 1 2 3 4 5 6
  1. मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम? मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

    दिए गए ऐरे को क्रमबद्ध करने के लिए होने वाले इनवर्जन की संख्या को इनवर्जन काउंट (inversion count) के रूप में जाना जाता है। इनवर्जन समस्या एक शास्त्रीय समस्या है जिसे मर्ज सॉर्ट एल्गोरिदम का उपयोग करके हल किया जा सकता है। इस समस्या में हम इसके बाईं ओर उससे बड़े सभी एलिमेंट्स को गिनेंगे और काउंट को आ

  1. C++ प्रोग्राम: BFS का उपयोग करके डायरेक्टेड ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: BFS का उपयोग करके डायरेक्टेड ग्राफ की कनेक्टिविटी जांचना

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

  1. C++ प्रोग्राम: BFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: BFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना

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