# 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
- Find minimum weight cycle in an undirected graph
- Program to find Circuit Rank of 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
- Eulerian Path in undirected graph
- Connected Components in an undirected graph
- Sum of degrees of all nodes of a undirected graph
- Print all the cycles in an undirected graph
- Detect cycle in an undirected graph
- Number of Triangles in an Undirected Graph
- Check if there is a cycle with odd weight sum in an undirected graph
- Count number of edges in an 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.