接触深度优先搜索

#include<iostream>
using namespace std;
/*
查找是否存在部分和等于一个给定的值,
对于递归的初步应用,与深度优先搜索
不加与加的情况,进行递归
*/ 
int a[100];
int n,k,i,sum;
bool dfs(int i,int sum,int n){
	cout<< "i="<<i<<"  sum="<<sum<<endl; 
	if(i==n) return sum==k;
	if(dfs(i+1,sum,n)) return true;//不加
	if(dfs(i+1,sum+a[i],n))	return true;//加
	return false;
}
int main()
{
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	if(dfs(0,0,n))	cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
	return 0;
} 

来自《挑战程序设计竞赛》白皮书例题p31

posted on 2017-04-06 00:52  linese-d  阅读(104)  评论(0)    收藏  举报

导航