Find all subsets using backtracking
Here given code implementation process.
/*
C Program for
Find all subsets using backtracking
*/
#include <stdio.h>
// Display subset value
void display(int result[], int n)
{
for (int i = 0; i < n; ++i)
{
printf(" %d", result[i]);
}
printf("\n");
}
// Find subset elements
void allSubset(int arr[], int result[], int i, int j, int n)
{
if (i == n)
{
display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
allSubset(arr, result, i + 1, j + 1, n);
allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
void findSubsets(int arr[], int n)
{
if (n <= 0)
{
return;
}
// Used to collect subset element
int result[n];
allSubset(arr, result, 0, 0, n);
}
int main()
{
int arr[] = {
1 , 2 , 3 , 4 , 5
};
// Get the size
int n = sizeof(arr) / sizeof(arr[0]);
findSubsets(arr, n);
return 0;
}
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
/*
Java Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
// Display subset value
public void display(int[] result, int n)
{
for (int i = 0; i < n; ++i)
{
System.out.print(" " + result[i]);
}
System.out.print("\n");
}
// Find subset elements
public void allSubset(int[] arr, int[] result, int i, int j, int n)
{
if (i == n)
{
display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
allSubset(arr, result, i + 1, j + 1, n);
allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
public void findSubsets(int[] arr, int n)
{
if (n <= 0)
{
return;
}
// Used to collect subset element
int[] result = new int[n];
allSubset(arr, result, 0, 0, n);
}
public static void main(String[] args)
{
Subset task = new Subset();
int[] arr =
{
1 , 2 , 3 , 4 , 5
};
// Get the size
int n = arr.length;
task.findSubsets(arr, n);
}
}
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
// Include header file
#include <iostream>
using namespace std;
/*
C++ Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
public:
// Display subset value
void display(int result[], int n)
{
for (int i = 0; i < n; ++i)
{
cout << " " << result[i];
}
cout << "\n";
}
// Find subset elements
void allSubset(int arr[], int result[], int i, int j, int n)
{
if (i == n)
{
this->display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
this->allSubset(arr, result, i + 1, j + 1, n);
this->allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
void findSubsets(int arr[], int n)
{
if (n <= 0)
{
return;
}
// Used to collect subset element
int result[n];
this->allSubset(arr, result, 0, 0, n);
}
};
int main()
{
Subset task = Subset();
int arr[] = {
1 , 2 , 3 , 4 , 5
};
// Get the size
int n = sizeof(arr) / sizeof(arr[0]);
task.findSubsets(arr, n);
return 0;
}
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
// Include namespace system
using System;
/*
C# Program
Find all subsets using backtracking
*/
// Tree Node
public class Subset
{
// Display subset value
public void display(int[] result, int n)
{
for (int i = 0; i < n; ++i)
{
Console.Write(" " + result[i]);
}
Console.Write("\n");
}
// Find subset elements
public void allSubset(int[] arr, int[] result, int i, int j, int n)
{
if (i == n)
{
display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
allSubset(arr, result, i + 1, j + 1, n);
allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
public void findSubsets(int[] arr, int n)
{
if (n <= 0)
{
return;
}
// Used to collect subset element
int[] result = new int[n];
allSubset(arr, result, 0, 0, n);
}
public static void Main(String[] args)
{
Subset task = new Subset();
int[] arr = {
1 , 2 , 3 , 4 , 5
};
// Get the size
int n = arr.Length;
task.findSubsets(arr, n);
}
}
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
<?php
/*
Php Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
// Display subset value
public function display( & $result, $n)
{
for ($i = 0; $i < $n; ++$i)
{
echo " ". $result[$i];
}
echo "\n";
}
// Find subset elements
public function allSubset( & $arr, & $result, $i, $j, $n)
{
if ($i == $n)
{
$this->display($result, $j);
return;
}
// Get element
$result[$j] = $arr[$i];
// Through by recursion find next subset
$this->allSubset($arr, $result, $i + 1, $j + 1, $n);
$this->allSubset($arr, $result, $i + 1, $j, $n);
}
// Handles the request to find all subsets
public function findSubsets( & $arr, $n)
{
if ($n <= 0)
{
return;
}
// Used to collect subset element
$result = array_fill(0, $n, 0);
$this->allSubset($arr, $result, 0, 0, $n);
}
}
function main()
{
$task = new Subset();
$arr = array(1, 2, 3, 4, 5);
// Get the size
$n = count($arr);
$task->findSubsets($arr, $n);
}
main();
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
/*
Node Js Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
// Display subset value
display(result, n)
{
for (var i = 0; i < n; ++i)
{
process.stdout.write(" " + result[i]);
}
process.stdout.write("\n");
}
// Find subset elements
allSubset(arr, result, i, j, n)
{
if (i == n)
{
this.display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
this.allSubset(arr, result, i + 1, j + 1, n);
this.allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
findSubsets(arr, n)
{
if (n <= 0)
{
return;
}
// Used to collect subset element
var result = Array(n).fill(0);
this.allSubset(arr, result, 0, 0, n);
}
}
function main()
{
var task = new Subset();
var arr = [1, 2, 3, 4, 5];
// Get the size
var n = arr.length;
task.findSubsets(arr, n);
}
main();
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
# Python 3 Program
# Find all subsets using backtracking
# Tree Node
class Subset :
# Display subset value
def display(self, result, n) :
i = 0
while (i < n) :
print(" ", result[i], end = "")
i += 1
print(end = "\n")
# Find subset elements
def allSubset(self, arr, result, i, j, n) :
if (i == n) :
self.display(result, j)
return
# Get element
result[j] = arr[i]
# Through by recursion find next subset
self.allSubset(arr, result, i + 1, j + 1, n)
self.allSubset(arr, result, i + 1, j, n)
# Handles the request to find all subsets
def findSubsets(self, arr, n) :
if (n <= 0) :
return
# Used to collect subset element
result = [0] * (n)
self.allSubset(arr, result, 0, 0, n)
def main() :
task = Subset()
arr = [1, 2, 3, 4, 5]
# Get the size
n = len(arr)
task.findSubsets(arr, n)
if __name__ == "__main__": main()
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
# Ruby Program
# Find all subsets using backtracking
# Tree Node
class Subset
# Display subset value
def display(result, n)
i = 0
while (i < n)
print(" ", result[i])
i += 1
end
print("\n")
end
# Find subset elements
def allSubset(arr, result, i, j, n)
if (i == n)
self.display(result, j)
return
end
# Get element
result[j] = arr[i]
# Through by recursion find next subset
self.allSubset(arr, result, i + 1, j + 1, n)
self.allSubset(arr, result, i + 1, j, n)
end
# Handles the request to find all subsets
def findSubsets(arr, n)
if (n <= 0)
return
end
# Used to collect subset element
result = Array.new(n) {0}
self.allSubset(arr, result, 0, 0, n)
end
end
def main()
task = Subset.new()
arr = [1, 2, 3, 4, 5]
# Get the size
n = arr.length
task.findSubsets(arr, n)
end
main()
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
/*
Scala Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
// Display subset value
def display(result: Array[Int], n: Int): Unit = {
var i: Int = 0;
while (i < n)
{
print(" " + result(i));
i += 1;
}
print("\n");
}
// Find subset elements
def allSubset(arr: Array[Int], result: Array[Int], i: Int, j: Int, n: Int): Unit = {
if (i == n)
{
this.display(result, j);
return;
}
// Get element
result(j) = arr(i);
// Through by recursion find next subset
this.allSubset(arr, result, i + 1, j + 1, n);
this.allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
def findSubsets(arr: Array[Int], n: Int): Unit = {
if (n <= 0)
{
return;
}
// Used to collect subset element
var result: Array[Int] = Array.fill[Int](n)(0);
this.allSubset(arr, result, 0, 0, n);
}
}
object Main
{
def main(args: Array[String]): Unit = {
var task: Subset = new Subset();
var arr: Array[Int] = Array(1, 2, 3, 4, 5);
// Get the size
var n: Int = arr.length;
task.findSubsets(arr, n);
}
}
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
/*
Swift 4 Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
// Display subset value
func display(_ result: [Int], _ n: Int)
{
var i: Int = 0;
while (i < n)
{
print(" ", result[i], terminator: "");
i += 1;
}
print(terminator: "\n");
}
// Find subset elements
func allSubset(_ arr: [Int], _ result: inout[Int], _ i: Int, _ j: Int, _ n: Int)
{
if (i == n)
{
self.display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
self.allSubset(arr, &result, i + 1, j + 1, n);
self.allSubset(arr, &result, i + 1, j, n);
}
// Handles the request to find all subsets
func findSubsets(_ arr: [Int], _ n: Int)
{
if (n <= 0)
{
return;
}
// Used to collect subset element
var result: [Int] = Array(repeating: 0, count: n);
self.allSubset(arr, &result, 0, 0, n);
}
}
func main()
{
let task: Subset = Subset();
let arr: [Int] = [1, 2, 3, 4, 5];
// Get the size
let n: Int = arr.count;
task.findSubsets(arr, n);
}
main();
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
/*
Kotlin Program
Find all subsets using backtracking
*/
// Tree Node
class Subset
{
// Display subset value
fun display(result: Array<Int> , n: Int): Unit
{
var i: Int = 0;
while (i < n)
{
print(" " + result[i]);
i += 1;
}
print("\n");
}
// Find subset elements
fun allSubset(arr: Array <Int> , result: Array<Int> , i: Int, j: Int, n: Int): Unit
{
if (i == n)
{
this.display(result, j);
return;
}
// Get element
result[j] = arr[i];
// Through by recursion find next subset
this.allSubset(arr, result, i + 1, j + 1, n);
this.allSubset(arr, result, i + 1, j, n);
}
// Handles the request to find all subsets
fun findSubsets(arr: Array<Int> , n: Int): Unit
{
if (n <= 0)
{
return;
}
// Used to collect subset element
var result: Array<Int> = Array(n)
{
0
};
this.allSubset(arr, result, 0, 0, n);
}
}
fun main(args: Array<String> ): Unit
{
var task: Subset = Subset();
var arr: Array<Int> = arrayOf(1, 2, 3, 4, 5);
// Get the size
var n: Int = arr.count();
task.findSubsets(arr, n);
}
Output
1 2 3 4 5
1 2 3 4
1 2 3 5
1 2 3
1 2 4 5
1 2 4
1 2 5
1 2
1 3 4 5
1 3 4
1 3 5
1 3
1 4 5
1 4
1 5
1
2 3 4 5
2 3 4
2 3 5
2 3
2 4 5
2 4
2 5
2
3 4 5
3 4
3 5
3
4 5
4
5
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment