广搜

一层层搜索,具有最短性

 

广搜主要解决的是最优问题,比如最短路径,最少步数

模板

int bfs()

{

初始化,初始状态存入队列;

队列首指针head=0; 尾指针tail=1

do

 {

    指针head后移一位,指向待扩展结点;

    for (int i=1;i<=max;++i)                  //max为产生子结点的规则数

     {

      if (子结点符合条件)

         {

            tail指针增1,把新结点存入列尾;

            if (新结点与原已产生结点重复) 删去该结点(取消入队,tail1;

            else

              if (新结点是目标结点) 输出并退出;

          }

      }

}while(head<tail);                       //队列为空

}

 

int bfs(int sx,int sy){

  q.push((Pos){sx,sy}); //起点加入队列

  vis[sx][sy]=true; //标记

  while(!q.empty())

  {

      x=q.front().x;

      y=q.front().y; //获取起始坐标

      q.pop(); //弹出队列

      if(符合条件) return ans(答案);

      for(int i=0;i<走法;i++)

      {

          tx=x+dx[i];

          ty=y+dy[i];

          if(符合条件) continue;

          if(符合条件) continue; //符合条件跳过循环

          /*

                         可行,执行该部分语句

                                                    */

          q.push((Pos){tx,ty}); //加入队列

      }

  }

}

 

最少步数(每一步代价相同)考虑BFS。

•求最优解(把每一种情况列举出来,通过计算找

最优情况)用dfs。

 

 

深搜一般是利用系统的栈,通过回溯来实现的。

•而广搜只用一个队列

•所以广搜的速度一般是优于深搜。

•同时相比深搜,广搜没有爆栈的风险。

 

posted on 2022-08-20 21:33  ljq0120  阅读(50)  评论(0)    收藏  举报