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 that 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, the 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:
C++14
// C++ code to check if a given graph// contains an independent set of size k#include <bits/stdc++.h>using namespace std;// Function prototypebool check(int[][5], vector<int> &, int);// Function to construct a set of given size kbool func(int graph[][5], vector<int> &arr, int k, int index, bool 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, arr.size())) { sol[0] = true; return true; } } else { // Set of size k can be formed even if we don't // include the vertex at current index. if (index >= k) { vector<int> newvec(arr.begin(), arr.end()); newvec.push_back(index); return (func(graph, newvec, 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 { arr.push_back(index); return func(graph, arr, 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)bool check(int graph[][5], vector<int> &arr, int n){ // Check if each vertex is connected to any other // vertex in the set or not for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (graph[arr[i]][arr[j]] == 1) return false; return true;}// Driver Codeint main(){ int graph[][5] = {{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}}; int k = 4; vector<int> arr; // Empty set bool sol[] = {false}; int n = sizeof(graph) / sizeof(graph[0]); func(graph, arr, k, n - 1, sol); if (sol[0]) cout << "Yes" << endl; else cout << "No" << endl; return 0;}// This code is contributed by// sanjeev2552 |
Java
// Java code to check if a // given graph contains an // independent set of size kimport java.util.*;class GFG{static Vector<Integer> arr = new Vector<>();// Function to cona set of // given size kstatic boolean func(int graph[][], int k, int index, boolean 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.size())) { sol[0] = true; return true; } } else { // Set of size k can be // formed even if we don't // include the vertex at // current index. if (index >= k) { Vector<Integer> newvec = new Vector<>(); newvec.add(index); return (func(graph, k - 1, index - 1, sol) || func(graph, k, index - 1, sol)); } // Set of size k cannot be // formed if we don't include // the vertex at current index. else { arr.add(index); return func(graph, k - 1, index - 1, sol); } } return true;}// Function to check if the // given set is independent // or not arr -. set of size // k (contains the index of // included vertex)static boolean check(int graph[][], int n){ // Check if each vertex is // connected to any other // vertex in the set or not for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (graph[arr.get(i)][arr.get(j)] == 1) return false; return true;}// Driver Codepublic static void main(String[] args){ int 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}}; int k = 4; boolean []sol = new boolean[1]; int n = graph.length; func(graph, k, n - 1, sol); if (sol[0]) System.out.print("Yes" + "\n"); else System.out.print("No" + "\n");}}// This code is contributed by Amit Katiyar |
Python3
# Python3 code to check if a given graph# contains an independent set of size k# Function to construct a set of given size kdef 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 = 4arr = [] # Empty set sol = [False]func(graph, arr[:], k, len(graph)-1, sol)if sol[0] == True: print("Yes")else: print("No") |
C#
// C# code to check if a // given graph contains an // independent set of size kusing System;using System.Collections.Generic;class GFG{static List<int> arr = new List<int>();// Function to cona set of // given size kstatic bool func(int [,]graph, int k, int index, bool []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.Count)) { sol[0] = true; return true; } } else { // Set of size k can be // formed even if we don't // include the vertex at // current index. if (index >= k) { List<int> newvec = new List<int>(); newvec.Add(index); return (func(graph, k - 1, index - 1, sol) || func(graph, k, index - 1, sol)); } // Set of size k cannot be // formed if we don't include // the vertex at current index. else { arr.Add(index); return func(graph, k - 1, index - 1, sol); } } return true;}// Function to check if the // given set is independent // or not arr -. set of size // k (contains the index of // included vertex)static bool check(int [,]graph, int n){ // Check if each vertex is // connected to any other // vertex in the set or not for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++) if (graph[arr[i],arr[j]] == 1) return false; return true;}// Driver Codepublic static void Main(String[] args){ int [,]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 } }; int k = 4; bool []sol = new bool[1]; int n = graph.GetLength(0); func(graph, k, n - 1, sol); if (sol[0]) Console.Write("Yes" + "\n"); else Console.Write("No" + "\n");}}// This code is contributed by Amit Katiyar |
Javascript
<script>// JavaScript implementation of the above approach// Function to construct a set of given size kfunction 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, arr.length)) { sol[0] = true; return true; } } else { // Set of size k can be formed even if we don't // include the vertex at current index. if (index >= k) { let newvec = new Array(); for(let x of arr){ newvec.push(x); } newvec.push(index); return (func(graph, newvec, k - 1,index - 1, sol) || 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 { arr.push(index); return func(graph, arr, 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)function check(graph,arr,n){ // Check if each vertex is connected to any other // vertex in the set or not for (let i = 0; i < n; i++) for (let j = i + 1; j < n; j++) if (graph[arr[i]][arr[j]] == 1) return false; return true;}// Driver Codelet 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]];let k = 4;let arr = []; // Empty setlet sol = [false];let n = graph.length;func(graph, arr, k, n - 1, sol);if (sol[0]) document.write("Yes");else document.write("No");// This code is written by Shinjanpatra</script> |
Yes
Complexity Analysis:
- Time Complexity:
where V is the number of vertices in the graph and k is the given size of set.
- Auxiliary Space: O(V)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

