
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Product of lengths of all cycles in an undirected graph in C++
We are given with the undirected as well as unweighted graph as an input and the task is to find the product of the cycles that are formed in the given and display the result.
Example
Input
In the given figure, there are 8 nodes and out of that 5 nodes are forming cycle including 1, 6, 3, 5, 8 and rest of the node are not included in the cycle. So, the length of the cycle is 5 as it includes 5 node therefore product is 5
In the given figure, there are 12 nodes and out of that 11(5 +6) nodes are forming cycle including 1, 6, 3, 5, 8 and 9, 4, 10, 11, 22, 12 and the rest of the node 2 is not included in the cycle. So, the length of the cycle is 5 * 6 = 30
Approach used in the below program is as follows−
- Input the nodes for forming the cycle
- Create the DFS function and call it to traverse the vertex by coloring it
- Either the node are marked completely visited or partially visited
- Completely visited node need not be visit again and hence need not to store it whereas partially visited nodes need to be stored because they are visited again
- Print the result
Algorithm
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
Example
#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; }
Output
Product of all the nodes in the cycle is :4
- Related Articles
- Print all the cycles in an undirected graph in C++
- Sum of the minimum elements in all connected components of an undirected graph in C++
- Number of Connected Components in an Undirected Graph in C++
- Count number of edges in an undirected graph in C++
- Detect Cycle in a an Undirected Graph
- Python Program to Find All Connected Components using DFS in an Undirected Graph
- Python Program to Find All Connected Components using BFS in an Undirected Graph
- Find if an undirected graph contains an independent set of a given size in Python
- Find if an undirected graph contains an independent set of a given size in C++
- C++ Program to Find the Connected Components of an UnDirected Graph
- Maximum Product of Word Lengths in C++
- Program to find the diameter, cycles and edges of a Wheel Graph in C++
- All About Sleep Cycles and the Stages of Sleep
- Product of all other numbers an array in JavaScript
- Product of all prime numbers in an Array in C++

Advertisements