BFS 和 DFS

BFS:

优点:1,不会爆栈

   2, 可以查询最小方案数 和 最短路径

缺点:空间是指数级别的

 

 

队列模板:

q.push(head) 
while(!q.empty())
{
  vertex=q.front();
  q.pop();
  if(vertex 为目标状态)
    输出
  for( next=vertex+* )    // 循环所有子节点
  {
    if( next 合法)
      q.push(next)
  }
} 

  

 

 

DFS:

优点:1,空间和深度成正比,为 n

   2,可以利用递归来记录路径

缺点: 1,会爆栈  当树的深度达到10万层,4M 左右就爆了

 

 

递归模板

void dfs(状态A)
{
  if(A不合法)       // 回溯
    return
  if(A为目标状态)
    输出
  if(A 不为目标状态)  // 递归调用,求下一个
    dfs(A+*)  
}

栈模板

s.push(head) 
while(!q.empty())
{
  vertex=s.top();
  s.pop();
  if(vertex 为目标状态)
    输出
  for( next=vertex+* )    // 循环所有子节点
  {
    if( next 合法)
      s.push(next)
  }
} 

  

 

 ==================================

陇西行其二        陈陶

誓扫匈奴不顾身,五千貂锦丧胡尘。

可怜无定河边骨,犹是春闺梦里人。 

 

posted @ 2020-03-08 01:29  叫我妖道  阅读(225)  评论(2编辑  收藏  举报
~~加载中~~