深度优先总结

本文探讨了如何使用深度优先搜索(DFS)解决复杂问题,重点介绍了如何定义节点与逻辑顺序,并通过逐步剪枝来优化搜索过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://blog.youkuaiyun.com/qq_32183461/article/details/50705953

一般题目下来,感觉到穷举的味道,便可以想想是否可以深度优先。

1.一般题目下来,先思考以什么为结点,以什么样的逻辑顺序。

2.一般题目最初的思路都是基于以下这样的模型。然后再通过慢慢的剪枝.条件判断中途break,等优化,具体因题而异,然后渐渐的与该模型不相似。这样的模型其实是递归到最深时才进行判断,一般我们进行优化的后可以边递归边判断,即把判断写在了dfs里面,用条件语句判断,如果进入到里边判断不符合后要break.或者某些 取值集合的元素个数 与 深度不同的题目,由深到浅搜索,只要符合既可以beak,不用再让再无意义程序递归下去,比如这道题目,在该题目中,每个结点都有自己的一个取值,互相独立,所以不需要v[i]标记,而是一个for循环的遍历,以自己的取值域为判断。

    

void dfs(int n)  
{  
    int i;  
    if(n>x)  //递归到最深再判断
    jude();  
    for(i=1;i<=x;i++)   
        if(v[i])  
        {  
            v[i] = 0;  
            a[n] = i;  
            dfs(n+1);   
            v[i] = 1;//如果递归取值共用一个集合的话,需要用这样一个数组来标志。
          }   
}   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值