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

C++ में एक अप्रत्यक्ष ग्राफ में सभी चक्रों की लंबाई का गुणनफल

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

उदाहरण

इनपुट

C++ में एक अप्रत्यक्ष ग्राफ में सभी चक्रों की लंबाई का गुणनफल

दी गई आकृति में, 8 नोड हैं और उनमें से 5 नोड 1, 6, 3, 5, 8 सहित चक्र बना रहे हैं और शेष नोड चक्र में शामिल नहीं हैं। तो, चक्र की लंबाई 5 है क्योंकि इसमें 5 नोड शामिल हैं इसलिए उत्पाद 5 है

C++ में एक अप्रत्यक्ष ग्राफ में सभी चक्रों की लंबाई का गुणनफल

दी गई आकृति में, 12 नोड हैं और उनमें से 11(5 +6) नोड चक्र बना रहे हैं जिनमें 1, 6, 3, 5, 8 और 9, 4, 10, 11, 22, 12 और बाकी के नोड शामिल हैं। नोड 2 चक्र में शामिल नहीं है। तो, चक्र की लंबाई 5 * 6 =30

. है

नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -

  • चक्र बनाने के लिए नोड्स इनपुट करें
  • डीएफएस फ़ंक्शन बनाएं और इसे रंग देकर शीर्ष को पार करने के लिए कॉल करें
  • या तो नोड पूरी तरह से देखे गए या आंशिक रूप से देखे गए चिह्नित हैं
  • पूरी तरह से देखे गए नोड को फिर से देखने की आवश्यकता नहीं है और इसलिए इसे संग्रहीत करने की आवश्यकता नहीं है जबकि आंशिक रूप से देखे गए नोड्स को संग्रहीत करने की आवश्यकता है क्योंकि वे फिर से देखे जाते हैं
  • परिणाम प्रिंट करें

एल्गोरिदम

Start
Step 1-> declare function to traverse the graph using DFS approach
   void DFS(int i, int j, int color[], int highlight[], int parent[], int& number)
   IF color[i] = 2
      Return
   End
   IF color[i] = 1
      Set number++
      Declare and set int temp = j
      Set highlight[temp] = number
      Loop While temp != i
         Set temp = parent[temp]
         Set highlight[temp] = number
      End
      Return
   End
   Set parent[i] = j
   Set color[i] = 1
   For int k : graph[i]
   IF k = parent[i]
      Continue
   End
   Call DFS(k, i, color, highlight, parent, number)
   End
Set color[i] = 2
Step 2-> declare function to find product of nodes in cycle
   int product(int edge, int highlight[], int& number)
   call unordered_map<int, int> mp
   Loop For i = 1 and i <= edge and i++
      IF (highlight[i] != 0)
         Set mp[highlight[i]]++
      End
   End
   Declare and set int temp = 1
   Loop For i = 1 and i <= number and i++
      Set temp = temp * mp[i]
   End
   IF number = 0
      Set temp = 0
   End
return temp
Step 3-> In main()
   Call function as insert(1, 2) to insert a node
   Declare int color[size], parent[size]
   Declare int highlight[size]
   Declare and set int number = 0
   Declare and set int edge = 10
   Call DFS(1, 0, color, highlight, parent, number)
   Call print function as product(edge, highlight, number)
Stop

उदाहरण

#include <bits/stdc++.h>
using namespace std;
const int size = 100000;
vector<int> graph[size];
//function to traverse the graph using DFS approach
void DFS(int i, int j, int color[], int highlight[], int parent[], int& number) {
   // for travered node
   if (color[i] == 2) {
      return;
   }
   //not completely visited
   if (color[i] == 1) {
      number++;
      int temp = j;
      highlight[temp] = number;
      //for backtracking the vertex
      while (temp != i) {
         temp = parent[temp];
         highlight[temp] = number;
      }
      return;
   }
   parent[i] = j;
   color[i] = 1;
   for (int k : graph[i]) {
      if (k == parent[i]) {
         continue;
      }
      DFS(k, i, color, highlight, parent, number);
   }
   color[i] = 2;
}
// function for inserting edges to graph
void insert(int u, int v) {
   graph[u].push_back(v);
   graph[v].push_back(u);
}
// Find product of nodes in cycle
int product(int edge, int highlight[], int& number) {
   unordered_map<int, int> mp;
   for (int i = 1; i <= edge; i++) {
      if (highlight[i] != 0)
      mp[highlight[i]]++;
   }
   int temp = 1;
   for (int i = 1; i <= number; i++) {
      temp = temp * mp[i];
   }
   if (number == 0)
   temp = 0;
   return temp;
}
int main() {
   //for inserting a node in the graph
   insert(1, 2);
   insert(2, 3);
   insert(3, 4);
   insert(4, 6);
   insert(4, 7);
   insert(5, 6);
   insert(3, 5);
   insert(7, 8);
   insert(6, 10);
   insert(5, 9);
   insert(10, 11);
   int color[size], parent[size];
   int highlight[size];
   int number = 0;
   int edge = 10;
   DFS(1, 0, color, highlight, parent, number);
   // function to print the cycles
   cout<<"product of all the nodes in the cycle is :"<< product(edge, highlight, number);
   return 0;
}

आउटपुट

Product of all the nodes in the cycle is :4

  1. सी++ में एक अप्रत्यक्ष ग्राफ के सभी जुड़े घटकों में न्यूनतम तत्वों का योग

    इस समस्या में, हमें N संख्याओं का एक सरणी arr दिया जाता है जहाँ arr[i] (i+1)वें नोड का प्रतिनिधित्व करता है। इसके अलावा, किनारों के एम जोड़े हैं जहां यू और वी किनारे से जुड़े नोड का प्रतिनिधित्व करते हैं। हमारा काम एक अप्रत्यक्ष ग्राफ के सभी जुड़े घटकों में न्यूनतम तत्वों का योग खोजने के लिए एक कार्

  1. सभी चक्रों को C++ में एक अप्रत्यक्ष ग्राफ में प्रिंट करें

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

  1. C++ में डिस्कनेक्टेड ग्राफ़ के लिए BFS

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