队列:先进先出,队头删除元素,队尾加入元素
创建队列对象 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 ;
}