黄蕊小白花 发表于 2020-7-18 11:42:56

深度优先搜索

         深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。
用c++更好地实现
//C++深度优先搜索(递归树模拟)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#define MAX_N 1000
using namespace std;
    int a;
    int n,k;

//已经从前i项得到了和sum,然后对于i项之后的进行分支
bool dfs(int i,int sum)
{
    //如果前n项都计算过了 ,则返回sum是否与k相等
    if(i==n)
    {
      return sum==k;
   }

    //不加上a的情况的分支
    if(dfs(i+1,sum))
    {
      return true;
    }
    //加上a的情况的分支
    //if(dfs(i+1,sum+a))
    if(dfs(i+1,sum+a))
    {
      return true;
    }

    //无论是否加上a都不能凑成k就返回false
    return false;
}
void solve()
{
   //if(dfs(1,0))
   if(dfs(0,0))
    {
         cout<<"Yes"<<endl;
    }
   else
   {
         cout<<"No"<<endl;
   }
}
int main(void)
{
    cin>>n;
    int i,temp;
    //for(i=1;i<=n;i++)
    for(i=0;i<n;i++)
    {
      cin>>temp;
      a=temp;
    }
    cin>>k;

    solve();

    return 0;
}




页: [1]
查看完整版本: 深度优先搜索