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

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

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

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

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

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

  • 相关阅读:
    day10 Python 形参顺序
    为oracle中的表格增加列和删除列
    为mapcontrol中的图层设置透明度
    最大的愿望 2007-05-10
    动心 2004年后半年
    写在十年 2007-09-15 (写给L之三)
    致vi老大 2011.1
    如潮 2011.2
    自然人——女孩思绪 (2006-09-14 08:21:51)
    朋友(2003年)
  • 原文地址:https://www.cnblogs.com/ITEagle/p/2193599.html
Copyright © 2011-2022 走看看