# Maximal Independent Set in an Undirected Graph

Given an undirected graph defined by the number of vertex V and the edges E[ ], the task is to find Maximal Independent Vertex Set in an undirected graph.

Independent Set: An independent set in a graph is a set of vertices which are not directly connected to each other.

Note: It is a given that there is at least one way to traverse from any vertex in the graph to another, i.e. the graph has one connected component.

Examples:

Input: V = 3, E = { (1, 2), (2, 3) }
Output: {1, 3}
Explanation:
Since there are no edges between 1 and 3, and we cannot add 2 to this since it is a neighbour of 1, this is the Maximal Independent Set.

Input: V = 8,
E = { (1, 2), (1, 3), (2, 4), (5, 6), (6, 7), (4, 8) }
Output: {2, 3, 5, 7, 8}

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:
This problem is an NP-Hard problem, which can only be solved in exponential time(as of right now).
Follow the steps below to solve the problem:

• Iterate through the vertices of the graph and use backtracking to check if a vertex can be included in the Maximal Independent Set or not.
• Two possibilities arise for each vertex, whether it can be included or not in the maximal independent set.
• Initially start, considering all vertices and edges. One by one, select a vertex. Remove that vertex from the graph, excluding it from the maximal independent set, and recursively traverse the remaining graph to find the maximal independent set.
• Otherwise, consider the selected vertex in the maximal independent set and remove all its neighbors from it. Proceed to find the maximal independent set possible excluding its neighbors.
• Repeat this process for all vertices and print the maximal independent set obtained.

Below is the implementation of the above approach:

## Python3

 # Python Program to implement # the above approach    # Recursive Function to find the # Maximal Independent Vertex Set     def graphSets(graph):            # Base Case - Given Graph      # has no nodes     if(len(graph) == 0):         return []           # Base Case - Given Graph     # has 1 node     if(len(graph) == 1):         return [list(graph.keys())[0]]            # Select a vertex from the graph     vCurrent = list(graph.keys())[0]            # Case 1 - Proceed removing     # the selected vertex     # from the Maximal Set     graph2 = dict(graph)            # Delete current vertex      # from the Graph     del graph2[vCurrent]            # Recursive call - Gets      # Maximal Set,     # assuming current Vertex      # not selected     res1 = graphSets(graph2)            # Case 2 - Proceed considering     # the selected vertex as part     # of the Maximal Set        # Loop through its neighbours     for v in graph[vCurrent]:                    # Delete neighbor from          # the current subgraph         if(v in graph2):             del graph2[v]            # This result set contains VFirst,     # and the result of recursive     # call assuming neighbors of vFirst     # are not selected     res2 = [vCurrent] + graphSets(graph2)            # Our final result is the one      # which is bigger, return it     if(len(res1) > len(res2)):         return res1     return res2    # Driver Code V = 8    # Defines edges E = [ (1, 2),       (1, 3),       (2, 4),       (5, 6),       (6, 7),       (4, 8)]    graph = dict([])    # Constructs Graph as a dictionary  # of the following format-    # graph[VertexNumber V]  # = list[Neighbors of Vertex V] for i in range(len(E)):     v1, v2 = E[i]            if(v1 not in graph):         graph[v1] = []     if(v2 not in graph):         graph[v2] = []            graph[v1].append(v2)     graph[v2].append(v1)    # Recursive call considering  # all vertices in the maximum  # independent set maximalIndependentSet = graphSets(graph)    # Prints the Result  for i in maximalIndependentSet:     print(i, end =" ")

Output:

2 3 8 5 7

Time Complexity: O(2N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.