码迷,mamicode.com
首页 > 其他好文 > 详细

专题一 简单搜索

时间:2015-06-09 23:37:38      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

本专题主要锻炼搜索的两大方法——bfs (宽度优先搜索)和 dfs (深度优先搜索)

===================================华丽的分割线=======================================

一、bfs——宽度优先搜索    

  bfs主要运用于搜索中求最短时间的问题,搜索过程中一般需要运用 queue 的操作。具体的操作如下:

       1.首先需要将 队列 和 visit数组 清空。(这一点很重要!!!)

       2.然后将起点信息 push 进队列,标记为visited(修改 visit 数组中元素对应的值),信息一般都用结构体存储,当然,所建立的 queue 也必须是结构体类型的。

       3.接下来就是主体了——一个while循环,判断条件为 队列非空。

   每次循环,需要取出队首元素,然后 pop 出队首元素。首先判断是否以满足题目要求,满足的话 return 所需要的信息,否则以该元素为中心,遍历四周的节点,如果节点可以到达且未被访问,则将该节点的信息 push 进队列,并标记为visited。重复循环即可。

  4.如果到达while循环外面,说明题目的要求无法达到,返回 impossible 即可。

 

伪代码如下:

Q empty
init state - s
Q push s
visite s
while(Q ! empty)
{
  state now = Q front
  Q pop
  next = update now
  if(next not visited)
  {
    Q push next
    visite next
  }  
}
return impossible

 

几个注意点:

       1.各个数据的清空和初始化

  2.遍历四周的节点可以用一个for循环,具体实现方法请看最后的题解。

 

===============================华丽的分割线的大儿子=================================

 

二、dfs——深度优先检索

  dfs主要运用于

专题一 简单搜索

标签:

原文地址:http://www.cnblogs.com/yaoyueduzhen/p/4564807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!