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

सी ++ प्रोग्राम यह पता लगाने के लिए कि 2 दिए गए नोड्स के बीच पथ मौजूद है या नहीं

यह एक सी ++ प्रोग्राम है जो यह पता लगाने के लिए है कि 2 दिए गए नोड्स के बीच पथ मौजूद है या नहीं

एल्गोरिदम

Begin
   function isReach() is a recursive function to check whether d is reachable to s:
   A) Mark all the vertices as unvisited.
   B) Mark the current node as visited and enqueue it and it will be used to get all adjacent vertices of a vertex.
   C) Dequeue a vertex from queue and print it.
   D) Get all adjacent vertices of the dequeued vertex s.
   E) If an adjacent has not been visited, then mark it visited and enqueue it.
   F) If this adjacent node is the destination node, then return true else continue to BFS.
End

उदाहरण

#include <iostream>
#include <list>
using namespace std;
class G {
   int n;
   list<int> *adj;
   public:
      G(int n);
      void addEd(int x, int w);
      bool isReach(int s, int d);
};
G::G(int n) { //constructor 
   this->n = n;
   adj = new list<int> [n];
}
void G::addEd(int x, int w) { //adding edge to the graph
   adj[x].push_back(w); //ad w to x’s list
}
bool G::isReach(int s, int d) {
   if (s == d)
   return true;
   bool *visited = new bool[n];
   //Mark all the vertices as unvisited.
   for (int i = 0; i < n; i++)
      visited[i] = false;
   list<int> queue;
   //Mark the current node as visited and enqueue it and it will be used to get all adjacent vertices of a vertex
   visited[s] = true;
   queue.push_back(s);
   list<int>::iterator i;
   while (!queue.empty()) {
      s = queue.front();
      queue.pop_front(); //Dequeue a vertex from queue and print it
      //If a adjacent has not been visited,
      for (i = adj[s].begin(); i != adj[s].end(); ++i) {
         if (*i == d)
            return true;
         if (!visited[*i]) {
            visited[*i] = true;
            queue.push_back(*i);
         }
      }
   }
   return false;
}
int main() {
   G g(4);
   g.addEd(1, 3);
   g.addEd(0, 1);
   g.addEd(2, 3);
   g.addEd(1, 0);
   g.addEd(2, 1);
   g.addEd(3, 1);
   cout << "Enter the source and destination vertices: (0-3)";
   int a, b;
   cin >> a >> b;
   if (g.isReach(a, b))
      cout << "\nThere is a path from " << a << " to " << b;
   else
      cout << "\nThere is no path from " << a << " to " << b;
   int t;
   t = a;
   a = b;
   b= t;
   if (g.isReach(a, b))
      cout << "\nThere is a path from " << a << " to " << b;
   else
      cout << "\nThere is no path from " << a << " to " << b;
   return 0;
}

आउटपुट

Enter the source and destination vertices: (0-3)
There is a path from 3 to 1
There is a path from 1 to 3

  1. C++ प्रोग्राम में एक बाइनरी ट्री के दो नोड्स के बीच की दूरी का पता लगाएं

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

  1. C++ में किसी बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ का XOR

    इस समस्या में हमें एक बाइनरी ट्री और बाइनरी ट्री के दो नोड दिए जाते हैं। हमारा काम दो नोड्स के बीच के रास्ते में आने वाले सभी नोड्स के XOR को प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, हमें 2 और 3 के बीच के सभी नोड्स के xor को खोजने की जरूरत है। 2 से 3 तक का रास्ता, 2 → 6 → 1 →

  1. C++ प्रोग्रामिंग में बाइनरी ट्री में किन्हीं दो नोड्स के बीच प्रिंट पथ।

    हमें अलग-अलग नोड्स के एक बाइनरी ट्री और बाइनरी ट्री के दो नोड्स दिए गए हैं, जिसका बाइनरी ट्री में पथ हम प्रिंट करना चाहते हैं। उदाहरण के लिए - हम नोड 140 से 211 के बीच के पाथ को प्रिंट करना चाहते हैं, इसलिए इसका आउटपुट इस तरह होना चाहिए - Output: 140->3->10->211 विचार दो नोड्स के लिए रू