POJ 1683 所谓DFS(深度优先遍历)

所谓深度优先遍历,把问题想象成层次问题,每一层都有几个选项可供选择。

我们按深度优先遍历,就是只要当前选项还有可能对,就相信它是对的,往下一层次进发,如果到了某一层证明当前选择不可行,则选择该层其它选项,如果该层无其它选项可选,即该层所有选项都不可选,则说明问题出在上一层,则回溯到上一层重复“选择其它选项,若无其它选项继续回溯”的操作。

深度优先遍历的控制方法就像上面提到的那样:

在某一层,如果这一层没有被证明不可行,那么递归调用下一层,将所有工作都交给下一层,如果下一层可以成功解决整个问题(当然下一层可能还要递归再下一层),则返回TRUE,从而使调用可以层层以TRUE递归回溯,如果下一层不能解决这个问题,则尝试本层其它选项,如果本层如其它选项,则返回FALSE,表示当前策略错误,关于此FALSE如何被处理,由调用本层的上一层决定(尝试其它选项或返回FALSE)。

POJ 1683

就是典型的DFS,今天上午写的时候迷迷糊糊,乱七八糟,下午还是参考了别人的代码写了出来,没白参考,算是总结了一些关于DFS的特点和做法,都写在上面了。

其实这些书本上都写了,但是实际编程的时候就想不起来,只有亲自想通这些,才能总结好记住。如果能把上述思想都实现了,那就肯定完成了DFS咯。

代码如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值