BFS入门

队列:先进先出,队头删除元素,队尾加入元素

           创建队列对象  queue<元素类型>队列名

           队列添加元素   队列名.push(元素名)

           队头删除元素    队列名.pop()

           访问队尾元素     队列名.back()

           访问队首元素     队列名.front()

            判断是否为空    队列名.empty()

            返回队列大小    队列名.size()

bfs:

上电梯的例题

void bfs()
{
pos cur,nex;//pos表示结构体名,cur表示当前的,nex表示接下来
cur.level=Start;//楼层表示起点
cur.steps=0;//按的次数就是0
queue<pos>qu;
qu.push(cur);
vis[Start]=1;
while(!qu.empty())
{
      cur=qu.front();
qu.pop();
if(cur.level==End)//如果当前楼层就是目标楼层
{
cout<<cur.steps;
return;
}

接下来就有两种情况:

1.向上走

nex.level=cur.level+a[cur.level];

nex.steps=cur.step+1;

if(nex.level<=N)

{

if(vis[nex.level]==0)//这个楼层之前没来过

{

vis[nex.level]=1;//可以加到队列里面

qu.push(nex);}

}

2.向下走

nex.level=cur.level-a[cur.level];

nex.steps=cur.steps+1;

if(nex.level>=1)

{

if(vis[nex.level]==0)

{

vis[nex.level]=1;

qu.push(nex);   }

}

}

最后加上printf("-1\n");

return ;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值