1. 它又双叒叕是干什么的
它是一种搜索算法,用于寻找路径、结果等等等。
这不废话吗。🙃
2. 思路
注:写BFS代码会使用到队列(queue)。
举个“栗”子,我们来操作一下。
* * * * * * i * * * * * *
* * * * * * e * * * * * *
* * * j f b a c h k * * *
* * * * * * d * * * * * *
* * * * * * g * * * * * *
我们要从a出发找到k。
(1)
* * * * * * i * * * * * *
* * * * * * e * * * * * *
* * * j f b a c h k * * *
* * * * * * d * * * * * *
* * * * * * g * * * * * *
首先将a入队。
(2)
* * * * * * i * * * * * *
* * * * * * e * * * * * *
* * * j f b a c h k * * *
* * * * * * d * * * * * *
* * * * * * g * * * * * *
a出队。将a可扩展的b、c、d、e入队
(3)
* * * * * * i * * * * * *
* * * * * * e * * * * * *
* * * j f b a c h k * * *
* * * * * * d * * * * * *
* * * * * * g * * * * * *
b出队。将b可扩展的f入队。
c出队。将c可扩展的h入队。
……
(4)
* * * * * * i * * * * * *
* * * * * * e * * * * * *
* * * j f b a c h k * * *
* * * * * * d * * * * * *
* * * * * * g * * * * * *
f出队。将f可扩展的j入队。
g出队。g没有可扩展的。
h出队。将h可扩展的k入队。找到k了结束程序。
3. 代码模板~~
#define ll long long
bool vis[该定义的大小][该定义的大小];//用来记录走过的位置。
int d[4][2]={{0,-1},{0,1},{-1,0},{1,0}};//四个方向。
struct node{int x,y,step;/*一般是点,还有步数,也可以存其他的。*/};
queue<node> q;
void bfs(node beg){//beg起始点。
node tmp;
q.push(beg);
while(!q.empty()){
tmp=q.front();//取出最前面的。
q.pop();//删除。
if(tmp符合条件){
做记录;
return;
}
for(int i=0;i<4;i++){
ll x=tmp.x+d[i][0];//新点的x。
ll y=tmp.y+d[i][1];//新点的y。
if(如果这个点符合条件&&vis[y][x]==0){
q.push({x,y,tmp.step+1});//把它推入队列,在后面的时候就可以用了。
vis[y][x]=1;//走过的进行标记,以免重复。
}
}//这里是上、下、左、右查找的。
}
}
希望一键三连,求求啦!🧡看在作者刚开学的份上!
话说这跟开学有什么关系。🙃