In the below graph, there exists a cycle between vertex 1, 2 and 3.
1. There are no parallel edges between two vertices.
2. There are no self-loops(an edge connecting the vertex to itself) in the graph.
3. The graph can be disconnected.
Input: N = 3 , Edges = [[1, 2], [2, 3], [1, 3]].
Output: Yes
Explanation : There are a total of 3 vertices in the graph. There is an edge between vertex 1 and 2, vertex 2 and 3 and vertex 1 and 3. So, there exists a cycle in the graph.
The first line of input contains an integer 'T' which denotes the number of test cases or queries to be run. Then the test cases follow.
The first line of each test case contains two single space-separated integers ‘N’ and ‘M’ representing the total number of vertices and edges, respectively.
The next ‘M’ lines contain two single space-separated integers representing an edge of the graph.
For each test case, the only line of output will return “Yes” if there exists a cycle in the graph. Else print “No”.
You are not required to print the expected output, it has already been taken care of. Just implement the function.
1 <= T <= 10
1 <= N <= 5000
0 <= M <= min(5000, (N * (N - 1)) / 2)
1 <= edges[i][0] <= N
1 <= edges[i][1] <= N
Time Limit: 1 sec
There is a cycle in the graph only if there is a back edge (back edge is an edge that connects a vertex to another vertex that is discovered before it's parent) present in the graph. To detect a back edge, we will keep track of vertices that have been already visited. If we reach a vertex that is already visited and is not the parent vertex of the current vertex, then there is a cycle in the graph.
Here is the complete algorithm:
In this approach, we will use breadth-first search algorithm to find the cycle in the undirected graph.
The approach is similar to the previous approach with some changes in the ‘IS_CYCLE’ function.
The ‘IS_CYCLE’ function will work as follows:
In this approach, we will use the union-find algorithm to find the cycle in the undirected graph.
The main idea behind using this algorithm is that if we have two subsets that are already connected through an edge and if they get connected by another edge then they form a cycle.
The union-find algorithm is an algorithm that performs two useful operations on a disjoint-set data structure:
Find: Determine which subset a particular element is in. This can be used for determining if two elements are in the same subset.
Union: Join two subsets into a single subset.
We will iterate through all edges and whenever we find two vertices with the same parent we return “Yes”.
Here is the algorithm:
Find Center of Star Graph
Critical Connections in a Network
Critical Connections in a Network
Critical Connections in a Network
Good Bad Graph
COUNT ISLANDS
Distance to a Cycle in Undirected Graph