C++ BFS广度优先搜索✅

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  *  *  *

*  *  *  *  *  *  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;//走过的进行标记,以免重复。
			}
		}//这里是上、下、左、右查找的。
	}
}

希望一键三连,求求啦!🧡看在作者刚开学的份上!

话说这跟开学有什么关系。🙃

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值