BackTracking_Fixed sum for array elements
Given an array a contains distinct positive integers, count how many combinations of integers in a add up to exactly sum
For example, given int[] a = {11, 3, 8} ; and sum = 11
You should output 2, because 11 == 11 and 3 + 8 == 11
This is typically a backtracking problem
Enumerate all the subsets of the given array to see how many of them match the condition
when you write backtracking procedure using recursion, please be careful of which condition do you
use to terminate the loop, in this code snippet, there two conditions,
1. sum == 0
2. t == a.Length
and when t == a.Length, we might be got an solution yet, don't forget this case.
Backtracking
Code
recursive way
Code
C法
#include<stdio.h> #include<stdlib.h> int count = 0; // number of solutions /* * array - positive numbers * n - element count in array * sum - pair of sum * t - recursion deep */ void find_combinations(int *array, int n, int sum, int t) { if (t == n) { if (sum == 0) { count++; } return; } if (sum == 0) { // Find a solution count++; } else { if (sum >= array[t]) { // left tree find_combinations(array, n, sum - array[t], t + 1); } if (sum > 0) { // right tree find_combinations(array, n, sum, t + 1); } } } int main(void) { int a[] = {11, 3, 8, 4, 1, 7}; find_combinations(a, 6, 11, 0); printf("%d\n", count); system("pause"); return 0; }
==
作者:zdd
出处:http://www.cnblogs.com/graphics/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.