广搜
一层层搜索,具有最短性
广搜主要解决的是最优问题,比如最短路径,最少步数
模板
int bfs()
{
初始化,初始状态存入队列;
队列首指针head=0; 尾指针tail=1;
do
{
指针head后移一位,指向待扩展结点;
for (int i=1;i<=max;++i) //max为产生子结点的规则数
{
if (子结点符合条件)
{
tail指针增1,把新结点存入列尾;
if (新结点与原已产生结点重复) 删去该结点(取消入队,tail减1);
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。
深搜一般是利用系统的栈,通过回溯来实现的。
•而广搜只用一个队列。
•所以广搜的速度一般是优于深搜。
•同时相比深搜,广搜没有爆栈的风险。
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号