遞歸dfs

//DFS 深度優先搜索;
#include<iostream>
#define N 20
int a[N];
int n, k;
bool dfs(int i, int sum) {			//以遞歸來判斷;
	if (i == n)	return sum == k;	//到達樹的最後一層,若sum與想得到的總和相等則爲true;
	if (dfs(i + 1, sum))	return true;		//先考慮不加a[i]的情況;
	if (dfs(i + 1, sum + a[i]))	return true;	//加上a[i]的情況;
	return false;	//若前面諸多路徑沒有一條全爲true,則在最後這裏返回false;
}
void solve() {
	if (dfs(0, 0))	cout << "yes" << endl;
	else
	{
		cout << "no" << endl;
	}
}
int main() {
	cin >> n >> k;					// n是數組裏的數字個數,k是想要得到的數的總和;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	solve();
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章