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

किसी दिए गए स्रोत से गंतव्य तक सभी पथों को C++ में प्रिंट करें

इस समस्या में हमें एक निर्देशित ग्राफ़ दिया जाता है और हमें स्रोत से ग्राफ़ के गंतव्य तक के सभी पथों को प्रिंट करना होता है।

निर्देशित ग्राफ़ किनारों वाला एक ग्राफ़ है जो शीर्ष a से b तक निर्देशित होता है।

समस्या को समझने के लिए एक उदाहरण लेते हैं

किसी दिए गए स्रोत से गंतव्य तक सभी पथों को C++ में प्रिंट करें


स्रोत =के गंतव्य =पी

आउटपुट:

K -> T -> Y -> A -> P
K -> T -> Y -> P
K -> A -> P

यहाँ, हमने K से P तक के रास्ते खोजे हैं। हमने पथों को पार किया है और K से सभी पथ मुद्रित किए हैं जो हमें P तक ले जाते हैं।

इस समस्या को हल करने के लिए, हम गहराई-पहली खोज . का उपयोग करके ग्राफ़ को पार करेंगे ट्रैवर्सल तकनीक। स्रोत से प्रारंभ, हम अपने पथ सरणी में प्रत्येक शीर्ष स्टोर को पार करेंगे और इसे विज़िट के रूप में चिह्नित करेंगे (एक ही शीर्ष पर एकाधिक विज़िट से बचने के लिए)। और इस पथ को प्रिंट करें, जब गंतव्य शीर्ष पर पहुंच गया है।

आइए देखें तर्क को लागू करने वाला कार्यक्रम -

उदाहरण

#include<iostream>
#include <list>
using namespace std;
class Graph {
   int V;
   list<int> *adj;
   void findNewPath(int , int , bool [], int [], int &);
   public:
   Graph(int V);
   void addEdge(int u, int v);
   void printPaths(int s, int d);
};
Graph::Graph(int V) {
   this->V = V;
   adj = new list<int>[V];
}
void Graph::addEdge(int u, int v) {
   adj[u].push_back(v);
}
void Graph::printPaths(int s, int d) {
   bool *visited = new bool[V];
   int *path = new int[V];
   int path_index = 0;
   for (int i = 0; i < V; i++)
   visited[i] = false;
   findNewPath(s, d, visited, path, path_index);
}
void Graph::findNewPath(int u, int d, bool visited[],
int path[], int &path_index) {
   visited[u] = true;
   path[path_index] = u;
   path_index++;
   if (u == d) {
      for (int i = 0; i<path_index; i++)
      cout<<path[i]<<" ";
      cout << endl;
   } else {
      list<int>::iterator i;
      for (i = adj[u].begin(); i != adj[u].end(); ++i)
         if (!visited[*i])
            findNewPath(*i, d, visited, path, path_index);
   }
   path_index--;
   visited[u] = false;
}
int main() {
   Graph g(4);
   g.addEdge(0, 1);
   g.addEdge(0, 2);
   g.addEdge(0, 3);
   g.addEdge(2, 0);
   g.addEdge(2, 1);
   g.addEdge(1, 3);
   int s = 2, d = 3;
   cout<<"Following are all different paths from source to destination : \n";
   g.printPaths(s, d);
   return 0;
}

आउटपुट

Following are all different paths from source to destination :
2 0 1 3
2 0 3
2 1 3

  1. C++ में दिए गए नोड से k दूरी पर सभी नोड्स प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री, एक लक्ष्य नोड और एक पूर्णांक K दिया जाता है। हमें ट्री के सभी नोड्स को प्रिंट करना होता है जो लक्ष्य नोड से K की दूरी पर होते हैं। । बाइनरी ट्री एक विशेष पेड़ है जिसके प्रत्येक नोड में अधिकतम दो नोड (एक/दो/कोई नहीं) होते हैं। आइए समस्या को समझने के लिए एक उदाहरण

  1. किसी दिए गए स्रोत से गंतव्य तक सभी पथों को C++ में BFS का उपयोग करके प्रिंट करें

    इस समस्या में हमें एक निर्देशित ग्राफ़ दिया जाता है और हमें Breadth First Search (BFS) का उपयोग करके स्रोत से ग्राफ़ के गंतव्य तक के सभी पथों को प्रिंट करना होता है। निर्देशित ग्राफ़ किनारों के साथ एक ग्राफ है जो शीर्ष a से b तक निर्देशित होता है। समस्या को समझने के लिए एक उदाहरण लेते हैं -

  1. C++ का उपयोग करके एक पूर्ण बाइनरी ट्री में रूट से सभी नोड्स तक पथ प्रिंट करने का कार्यक्रम

    इस ट्यूटोरियल में, हम एक बाइनरी ट्री के रूट नोड से दिए गए बाइनरी ट्री में मौजूद अन्य सभी नोड्स के पथ को प्रिंट करने के लिए एक प्रोग्राम पर चर्चा करेंगे। इस कार्यक्रम में, हमें एक संख्या N दी जाएगी, जो बाइनरी ट्री में 1 से N तक मौजूद तत्वों की संख्या को दर्शाती है; 1 बाइनरी ट्री का रूट नोड है। इसलिए