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)
  }
} 

  

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

陇西行其二        陈陶

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

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

原文地址:https://www.cnblogs.com/asdfknjhu/p/12439784.html