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

C++ प्रोग्राम यह जांचने के लिए कि कोई ग्राफ़ मजबूती से जुड़ा है या नहीं

निर्देशित ग्राफ़ में घटकों को दृढ़ता से जुड़ा हुआ कहा जाता है, जब एक घटक में प्रत्येक जोड़ी के बीच एक पथ होता है।

C++ प्रोग्राम यह जांचने के लिए कि कोई ग्राफ़ मजबूती से जुड़ा है या नहीं

इस एल्गोरिथम को हल करने के लिए, सबसे पहले, प्रत्येक शीर्ष का अंतिम समय प्राप्त करने के लिए DFS एल्गोरिथ्म का उपयोग किया जाता है, अब ट्रांसपोज़्ड ग्राफ़ का अंतिम समय ज्ञात करें, फिर शीर्षों को टोपोलॉजिकल सॉर्ट द्वारा अवरोही क्रम में क्रमबद्ध किया जाता है।

इनपुट :ग्राफ़ का आसन्नता मैट्रिक्स।

0 0 1 1 0
1 0 0 0 0
0 1 0 0 0
0 0 0 0 1
0 0 0 0 0

आउटपुट :दिए गए ग्राफ़ में दृढ़ता से जुड़े हुए घटक निम्नलिखित हैं -

0 1 2
3
4

एल्गोरिदम

ट्रैवर्स (ग्राफ, स्टार्ट, विजिट किया गया)

इनपुट :वह ग्राफ़ जिसे ट्रेस किया जाएगा, आरंभिक शीर्ष और विज़िट किए गए फ़्लैग्स

नोड्स।

आउटपुट :डीएफएस तकनीक में प्रत्येक नोड से गुजरें और नोड्स प्रदर्शित करें।

Begin
   mark start as visited
   for all vertices v connected with start, do
      if v is not visited, then
         traverse(graph, v, visited)
   done
End

topoSort(u, विज़िट किया गया, स्टैक)

इनपुट - प्रारंभ नोड, विज़िट किए गए शीर्षों के लिए ध्वज, स्टैक।

आउटपुट - ग्राफ को छांटते समय स्टैक भरें।

Begin 
   mark u as visited 
   for all node v, connected with u, do 
      if v is not visited, then 
         topoSort(v, visited, stack) 
   done 
   push u into the stack 
End

getStrongConComponents(ग्राफ)

इनपुट -दिया गया ग्राफ।

आउटपुट - सभी मजबूती से जुड़े हुए घटक।

Begin
   initially all nodes are unvisited
   for all vertex i in the graph, do
      if i is not visited, then
         topoSort(i, vis, stack)
   done
   make all nodes unvisited again
   transGraph := transpose of given graph
   while stack is not empty, do
      pop node from stack and take into v
      if v is not visited, then
         traverse(transGraph, v, visited)
   done
End

उदाहरण कोड

#include <iostream>
#include <stack>
#define NODE 5
using namespace std;
int graph[NODE][NODE]= {
   {0, 0, 1, 1, 0},
   {1, 0, 0, 0, 0},
   {0, 1, 0, 0, 0},
   {0, 0, 0, 0, 1},
   {0, 0, 0, 0, 0}};
int transGraph[NODE][NODE];
void transpose() {       //transpose the graph and store to transGraph
   for(int i = 0; i<NODE; i++)
      for(int j = 0; j<NODE; j++)
         transGraph[i][j] = graph[j][i];
}
void traverse(int g[NODE][NODE], int u, bool visited[]) {
   visited[u] = true;    //mark v as visited
   cout << u << " ";
   for(int v = 0; v<NODE; v++) {
      if(g[u][v]) {
         if(!visited[v])
            traverse(g, v, visited);
      }
   }
}
void topoSort(int u, bool visited[], stack<int> &stk) {
   visited[u] = true;     //set as the node v is visited
   for(int v = 0; v<NODE; v++) {
      if(graph[u][v]) {     //for allvertices v adjacent to u
         if(!visited[v])
            topoSort(v, visited, stk);
      }
   }
   stk.push(u);     //push starting vertex into the stack
}
void getStrongConComponents() {
   stack<int> stk;
   bool vis[NODE];
   for(int i = 0; i<NODE; i++)
      vis[i] = false;    //initially all nodes are unvisited
   for(int i = 0; i<NODE; i++)
      if(!vis[i])     //when node is not visited
         topoSort(i, vis, stk);
   for(int i = 0; i<NODE; i++)
      vis[i] = false;    //make all nodes are unvisited for traversal
   transpose();       //make reversed graph
   while(!stk.empty()) {     //when stack contains element, process in topological order
      int v = stk.top(); stk.pop();
         if(!vis[v]) {
            traverse(transGraph, v, vis);
            cout << endl;
         }
   }
}
int main() {
   cout << "Following are strongly connected components in given graph: "<<endl;
   getStrongConComponents();
}

आउटपुट

Following are strongly connected components in given graph:
0 1 2
3
4

  1. सी ++ प्रोग्राम यह जांचने के लिए कि क्या एक अप्रत्यक्ष ग्राफ में एक यूलरियन पथ है

    यूलर पथ एक पथ है; जिससे हम हर नोड पर ठीक एक बार विजिट कर सकते हैं। हम एक ही किनारों को कई बार इस्तेमाल कर सकते हैं। यूलर सर्किट एक विशेष प्रकार का यूलर पथ है। जब यूलर पथ का प्रारंभिक शीर्ष भी उस पथ के अंतिम शीर्ष से जुड़ा होता है। यूलर पथ का पता लगाने के लिए, हमें इन शर्तों का पालन करना होगा ग्राफ

  1. C++ प्रोग्राम यह जांचने के लिए कि क्या एक अप्रत्यक्ष ग्राफ में एक यूलेरियन चक्र है

    यूलर सर्किट के बारे में जानने के लिए, हमारे पास यूलर पथ के बारे में विचार है। यूलर पथ एक पथ है; जिससे हम हर नोड पर ठीक एक बार विजिट कर सकते हैं। हम एक ही किनारों को कई बार इस्तेमाल कर सकते हैं। यूलर सर्किट एक विशेष प्रकार का यूलर पथ है। जब यूलर पथ का प्रारंभिक शीर्ष भी उस पथ के अंतिम शीर्ष से जुड़ा

  1. पायथन में दिया गया ग्राफ द्विदलीय है या नहीं, यह जांचने के लिए कार्यक्रम

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