定义:
const int N = 1e5 + 10;
int mp[N][N];
bool vis[N][N];
int dx[]= {0,1,0,-1,0},dy[]= {0,0,1,0,-1};
int bx[]={0,0,0,1,1,1,-1,-1,-1},by[]={0,1,-1,1,-1,0,1,-1,0};
struct pos{
//定义变量
int x,y,t;
};
基本模板:
BFS(){
queue<pos> q;//初始化队列
pos op;//初始化op
q.puah(op);
while(!q.empty()){ //队列不为空
op=q.front();
q.pop(); //队首出队
if(){
//判断是否找到了目标
}
for(){
//多个个方向
//符合条件的入队
//标记入队的点
}
}
}
模板块:
void bfs(int x,int y){
queue<pos> q;
pos op;
op.x=x,op.y=y,op.t=0;//初始化op各值;
q.push(op);
vis[x][y]=1;//标记
while(!q.empty()){
op=q.front();
q.pop();
if(满足条件){
输出;
return ;
}
for(int i=0;i<8;i++){
//dx[]||bx[]可以根据题目要求进行修改
int ex=op.x+dx[i];
int ey=op.y+dy[i];
//如果没有搜过&&没有越界
if(check(ex,ey)&&!vis[ex][ey]){
pos l;
l.x=ex;l.y=ey;l.t=p.t+1;
vis[ex][ey]=1;//标记已走过
q.push(l);
}
}
}
return ;
}