# Find if an undirected graph contains an independent set of a given size

Given an undirected graph, check if it contains an independent set of size **k**. Print ‘Yes’ if there exists an independent set of size **k**. Print ‘No’ otherwise.

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

**Example 1:**

Input : K = 4, graph = [[1, 1, 0, 0, 0], [1, 1, 1, 1, 1], [0, 1, 1, 0, 0], [0, 1, 0, 1, 0], [0, 1, 0, 0, 1]] Output : Yes

The above graph contains an independent set of size 4 (vertices 1, 2, 3, 4 are not directly connected to each other). Hence the output is ‘Yes’.

**Example 2:**

Input : K = 4, graph = [[1, 1, 0, 0, 0], [1, 1, 1, 1, 1], [0, 1, 1, 0, 0], [0, 1, 0, 1, 1], [0, 1, 0, 1, 1]] Output : No

The above graph doesn’t contain an independent set of size 4. Hence output is ‘No’.

**Approach:**

- Initialize a variable
**sol**with boolean*False*value. - Find all the possible sets of vertices of size
**K**from the given graph. - If an independent set of size
**k**is found, change the value of**sol**to True and return. - Else continue checking for other possible sets.
- In the end, if
**sol**is True, print ‘Yes’ else print ‘No’.

Below is the implementation of the above approach:

`# Python3 code to check if a given graph ` `# contains an independent set of size k ` ` ` `# Function to construct a set of given size k ` `def` `func(graph, arr, k, index, sol): ` ` ` ` ` `# Check if the selected set is independent or not. ` ` ` `# Change the value of sol to True and return ` ` ` `# if it is independent ` ` ` `if` `k ` `=` `=` `0` `: ` ` ` `if` `check(graph, arr) ` `=` `=` `True` `: ` ` ` `sol[` `0` `] ` `=` `True` ` ` `return` ` ` ` ` `else` `: ` ` ` `# Set of size k can be formed even if we don't ` ` ` `# include the vertex at current index. ` ` ` `if` `index >` `=` `k: ` ` ` `return` `(func(graph, arr[:] ` `+` `[index], k` `-` `1` `, index` `-` `1` `, sol) ` `or` ` ` `func(graph, arr[:], k, index` `-` `1` `, sol)) ` ` ` ` ` `# Set of size k cannot be formed if we don't ` ` ` `# include the vertex at current index. ` ` ` `else` `: ` ` ` `return` `func(graph, arr[:] ` `+` `[index], k` `-` `1` `, index` `-` `1` `, sol) ` ` ` `# Function to check if the given set is ` `# independent or not ` `# arr --> set of size k (contains the ` `# index of included vertex) ` `def` `check(graph, arr): ` ` ` ` ` `# Check if each vertex is connected to any other ` ` ` `# vertex in the set or not ` ` ` `for` `i ` `in` `range` `(` `len` `(arr)): ` ` ` `for` `j ` `in` `range` `(i ` `+` `1` `, ` `len` `(arr)): ` ` ` ` ` `if` `graph[arr[i]][arr[j]] ` `=` `=` `1` `: ` ` ` `return` `False` ` ` ` ` `return` `True` ` ` `# Driver Code ` `graph ` `=` `[[` `1` `, ` `1` `, ` `0` `, ` `0` `, ` `0` `], ` ` ` `[` `1` `, ` `1` `, ` `1` `, ` `1` `, ` `1` `], ` ` ` `[` `0` `, ` `1` `, ` `1` `, ` `0` `, ` `0` `], ` ` ` `[` `0` `, ` `1` `, ` `0` `, ` `1` `, ` `0` `], ` ` ` `[` `0` `, ` `1` `, ` `0` `, ` `0` `, ` `1` `]] ` ` ` `k ` `=` `4` `arr ` `=` `[] ` `# Empty set ` `sol ` `=` `[` `False` `] ` ` ` `func(graph, arr[:], k, ` `len` `(graph)` `-` `1` `, sol) ` ` ` `if` `sol[` `0` `] ` `=` `=` `True` `: ` ` ` `print` `(` `"Yes"` `) ` `else` `: ` ` ` `print` `(` `"No"` `) ` |

*chevron_right*

*filter_none*

**Output:**

Yes

**Time Complexity:** where **V** is the number of vertices in the graph and **k** is the given size of set.

## Recommended Posts:

- Find k-cores of an undirected graph
- Program to find Circuit Rank of an Undirected Graph
- Find minimum weight cycle in an undirected graph
- Disjoint Set (Or Union-Find) | Set 1 (Detect Cycle in an Undirected Graph)
- Convert the undirected graph into directed graph such that there is no path of length greater than 1
- Clone an Undirected Graph
- Detect cycle in an undirected graph using BFS
- Print all the cycles in an undirected graph
- Sum of degrees of all nodes of a undirected graph
- Eulerian Path in undirected graph
- Number of Triangles in an Undirected Graph
- Detect cycle in an undirected graph
- Connected Components in an undirected graph
- Check if there is a cycle with odd weight sum in an undirected graph
- Eulerian path and circuit for undirected graph

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.