zoukankan      html  css  js  c++  java
  • 深搜与宽搜的实现技巧

          近来准备C上机考试,做了一些迷宫搜索的题目,这是我在之前的学习中非常薄弱的地方,经过这次学习之后终于有了一些具体的认识,故记录下来。

          宽搜在解决最短路径的问题时使用的比较多,宽搜的概念非常简单,就是一层一层的搜索,直到发现目标。这里主要讲实现上。宽搜的实现主要使用了队列,从起点出发,遇到合法的点,就放入队列尾。每次取队列头进行处理,探索到新元素就放在队尾。如果队列中元素全部处理完也没有发现目标,则不存在这样的路径。遇到目标点之后,搜索结束。

          这是每一步只要单位时间的简单搜索。如果在某些特定的点,要花费大于一个单位的时间,那么就要找到所有可能到达目标的路径,选择最短路径。

         深搜比较适合解决路径的存在性问题,只要发现一个路径存在,搜索结束。深搜在实现上,一般使用递归和回溯。从起点出发,依次探索四个相邻单元,如果下一单元合法且不是目标点,则标记此点,递归,如果递归结束后,表明从这个方向的所有路径均不能到达目标,则取消标记,回溯。

         深搜往往和回溯相关,所谓回溯,就是当当前路径走不通,递归结束时,将标记的状态变回递归之前的状态,好从新选择方向。而当求最短路径的问题时,往往标记已经走过的路径,防止重复,造成无限循环。

  • 相关阅读:
    OC拨打电话
    oc唯一标时一部设备
    去掉UITableView多余的分割线
    UICollectionView的使用
    设置ulabel的行间距
    uitextfield
    iOS导航栏适配
    App Store 升级问题
    mac中使用终端生成RSA私钥和公钥文件
    js document
  • 原文地址:https://www.cnblogs.com/ITEagle/p/2193599.html
Copyright © 2011-2022 走看看