# include # include # include "subset_sum_brute.h" int main ( ); void subset_sum_brute_test01 ( ); /******************************************************************************/ int main ( ) /******************************************************************************/ /* Purpose: subset_sum_brute_test() tests subset_sum_brute(). Licensing: This code is distributed under the MIT license. Modified: 01 July 2013 Author: John Burkardt */ { timestamp ( ); printf ( "\n" ); printf ( "subset_sum_brute_test():\n" ); printf ( " C version.\n" ); printf ( " Test subset_sum_brute().\n" ); subset_sum_brute_test01 ( ); /* Terminate. */ printf ( "\n" ); printf ( "subset_sum_brute_test():\n" ); printf ( " Normal end of execution.\n" ); printf ( "\n" ); timestamp ( ); return 0; } /******************************************************************************/ void subset_sum_brute_test01 ( ) /******************************************************************************/ /* Purpose: subset_sum_brute_test01() tests subset_sum_brute(). Licensing: This code is distributed under the MIT license. Modified: 01 July 2013 Author: John Burkardt */ { int *choice; int i; int n = 21; int target; int weight[21] = { 518533, 1037066, 2074132, 1648264, 796528, 1593056, 686112, 1372224, 244448, 488896, 977792, 1955584, 1411168, 322336, 644672, 1289344, 78688, 157376, 314752, 629504, 1259008 }; int w_sum; printf ( "\n" ); printf ( "subset_sum_brute_test01():\n" ); printf ( " subset_sum_brute() looks for a selection\n" ); printf ( " from a set of weights that adds up to a given target.\n" ); /* Define the problem data. */ target = 2463098; printf ( "\n" ); printf ( " Target value:\n" ); printf ( " %d\n", target ); printf ( "\n" ); printf ( " I W(I)\n" ); printf ( "\n" ); for ( i = 0; i < n; i++ ) { printf ( " %2d %8d\n", i, weight[i] ); } choice = subset_sum_brute ( n, weight, target ); if ( choice[0] == -1 ) { printf ( "\n" ); printf ( " No solution was found.\n" ); } else { printf ( "\n" ); printf ( " I* W*\n" ); printf ( "\n" ); w_sum = 0; for ( i = 0; i < n; i++ ) { if ( choice[i] == 1 ) { w_sum = w_sum + weight[i]; printf ( " %2d %8d\n", i, weight[i] ); } } printf ( "\n" ); printf ( " Sum: %d\n", w_sum ); printf ( " Target: %d\n", target ); } free ( choice ); return; }