From 67681aa751bb0e3183c27d0f04f0514e02b60582 Mon Sep 17 00:00:00 2001 From: Swastika Gupta <64654203+Swastyy@users.noreply.github.com> Date: Mon, 28 Jun 2021 17:20:08 +0530 Subject: [PATCH] Create subset_sum.cpp --- backtracking/subset_sum.cpp | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 backtracking/subset_sum.cpp diff --git a/backtracking/subset_sum.cpp b/backtracking/subset_sum.cpp new file mode 100644 index 000000000..74668a91c --- /dev/null +++ b/backtracking/subset_sum.cpp @@ -0,0 +1,91 @@ +/** + * @file + * @brief Program to Count number of subsets + * + * @details Subset problem (https://en.wikipedia.org/wiki/Subset_sum_problem) + * @author [Swastika Gupta](https://github.com/swastyy) + */ + +#include /// for assert +#include /// for io operations +#include /// for std::vector + +/** + * @namespace backtracking + * @brief subset sum algorithm + */ +namespace backtracking { +/** + * @namespace Subsets + * @brief Functions for counting subsets in a given array with a given sum + */ +namespace Subsets { +/** + * @brief The main function implements count of subsets + * @param sum is the required sum of any subset + * @param in_arr is the input array + * @returns count of the number of subsets with required sum + */ + +std::uint64_t subset_sum(int sum, std::vector& in_arr) { + int nelement = in_arr.size(); //number of subset element + int count_of_subset = 0; + + for(int i=0; i < (1 << (nelement)); i++){ + std::vector subset; + for(int j=0;j array1 = {-7,-3,-2,5,8}; // input array + assert(backtracking::Subsets::subset_sum(0,array1)==2); // first argument in subset_sum function is the required sum and second is the input array + std::cout << "passed" << std::endl; + + // Test 2 + std::cout << "2nd test "; + std::vector array2 = {1, 2, 3, 3}; // input array + assert(backtracking::Subsets::subset_sum(6,array2)==3); // first argument in subset_sum function is the required sum and second is the input array + std::cout << "passed" << std::endl; + + // Test 3 + std::cout << "3rd test "; + std::vector array3 = {1, 1, 1, 1}; // input array + assert(backtracking::Subsets::subset_sum(1,array3)==4); // first argument in subset_sum function is the required sum and second is the input array + std::cout << "passed" << std::endl; + + // Test 4 + std::cout << "4th test "; + std::vector array4 = { 3, 3, 3, 3 }; // input array + assert(backtracking::Subsets::subset_sum(6,array4)==6); // first argument in subset_sum function is the required sum and second is the input array + std::cout << "passed" << std::endl; +} + + +/** + * @brief Main function + * @returns 0 on exit + */ +int main() { + test(); // execute the test + return 0; +}