深度优先搜索的用法——求数组部分和
2014-01-05 11:57
344 查看
深度优先搜索的用法——求数组部分和
问题主题:求数组部分和 |
问题描述: 给定整数a1,a2, … an,判断能否从中选出若干个数,使得它们的和为k。 限制条件: 1<=n<=20 -108<=ai<=108 -108<=k<=108 |
样例: 输入 n=4 a={1,2,4,7} k=13 输出 Yes (13=2+4+7) 输入 n=4 a={1,2,4,7} k=15 输出 No |
【解法一】
解题分析:
用递归的方法实现深度优先搜索,从a0开始依次判断,决定ai加入或不加入,对每一个种组合进行判断,决定是否存在和为k的情况。程序实现:
C++#include "stdafx.h" #include "iostream" using namespace std; const int MAX = 10; int result; int a[MAX]; int sum = 0; bool resolve(int a[], int n, int i, int sum) ; int _tmain(int argc, _TCHAR* argv[]) { int n; cout << "请?输º?入¨?n和¨ª结¨¢果?的Ì?大䨮小?:" <<endl; cin >> n >> result; cout << "请?输º?入¨?n个?数ºy:" <<endl; for(int i=0; i<n; i++) { cin >> a[i]; } if(resolve(a, n, 0, sum)) cout << "Yes" <<endl; else cout << "No" << endl; return 0; } bool resolve(int a[], int n, int i, int sum) { if(i >= n) return sum == result; //不?选?a[i] if(resolve(a, n, i+1, sum)) return true; //加¨®上¦?a[i] if(resolve(a, n, i+1, sum+a[i])) return true; return false; } |
/** * User: luoweifu * Date: 14-1-7 * Time: 上午11:33 */ public class PartSum { private int array[]; private int result; public PartSum() { } public PartSum(int[] array, int result) { this.array = array; this.result = result; } public void setArray(int[] array) { this.array = array; } public void setResult(int result) { this.result = result; } public boolean resolve(int[] array, int i, int sum) { int n = array.length; if(i >= n) return sum == result; if(resolve(array, i+1, sum)) return true; if(resolve(array, i+1, sum+array[i])) return true; return false; } public void partsumResolve() { if(resolve(array, 0, 0)) System.out.println("Yes"); else System.out.println("No"); } public static void main(String args[]) { PartSum partSum = new PartSum(new int[]{1,2,4,7}, 13); partSum.partsumResolve(); partSum.setResult(15); partSum.partsumResolve(); } } |
算法复杂度:
时间复杂度O(2n)相关文章推荐
- NSURLConnection对象
- HTML学习笔记
- Core Animation简介
- 68元?!卡巴斯基与各大银行的低价活动促销地址......................
- UIView+block动画和CALayer动画的区别
- RFKill
- opensuse安装openssh服务详解步骤
- UIView的显示原理
- 华硕x53x不提示进入BIOS,安f2进入
- doT.js详细介绍
- 软件开发模型(II)
- ssh连接超时解决方法
- 蜗牛—cocos2dx学习之网址
- iOS开发-mutating method sent to immutable object错误
- 权限管理系统设计
- Ubuntu 12.04下安装QT 4.0
- C++ preprocessor "/lib/cpp" fails sanity check
- Secure Apache Configuration
- GitHub---最简单的使用
- OGRE HelloWorld