BFS
广度优先搜索(也称宽度优先搜索,缩写BFS)
广搜属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。类似树的按层遍历,其过程为:首先访问初始点Vi,并将其标记为已访问过,接着访问Vi的所有未被访问过可到达的邻接点Vi1、Vi2…Vit,并均标记为已访问过,然后再按照Vi1、Vi2…Vit 的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依此类推,直到图中所有和初始点Vi有路径相通的顶点都被访问过为止。
模板
void bfs(int id){
queue<pii>q;
q.push(make_pair(sx[id],sy[id]));
dis[id][sx[id]][sy[id]]=0;
while(!q.empty()){
int x=q.front().first,y=q.front().second;
q.pop(); //记得
for(int i=0;i<4;i++){
int xx=x+dx[i],yy=y+dy[i];
if(1<=xx && xx<= n && 1<=yy && yy<=m && dis[id][xx][yy]==inf && s[xx][yy]!='#'){
dis[id][xx][yy]=dis[id][x][y]+1;
q.push(make_pair(xx,yy));
}
}
}
}
DFS
深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。
模板
void DFS()
{
if( )
{
…
return;
}
for(inti=0;i<4;i++)
{
DFS(N+1);
}
}