dfs入门

问题是 给你a1到an的所有数字,让你找到和为k的情况有没有可能存在。

分析:

每一个数字都有加或者不加的情况,所以用深度搜索把所有情况都遍历一下即可

代码如下:

#include<iostream>
using namespace std;
#define Max_n 100000
int a[Max_n],n,k;
bool dfs(int i,int sum)
{
    if(i==n)
        return sum==k;
    if(dfs(i+1,sum))
    return true;
    if(dfs(i+1,sum+a[i]))
        return true;
    return false;
}
void solve()
{
    if(dfs(0,0))
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
}
int main()
{
     while(cin>>n)
    {
        int i;
        for(i=0;i<n;i++)
        cin>>a[i];
        cin>>k;
        solve();
    }








    return 0;
}
View Code
原文地址:https://www.cnblogs.com/renxin123/p/8453300.html