Queue队列就是先进先出。
Enqueue():在队列的末端添加元素
Dequeue():在队列的头部读取和删除一个元素,注意,这里读取元素的同时也删除了这个元素。如果队列中不再有任何元素。就抛出异常
Peek():在队列的头读取一个元素,但是不删除
Count:返回队列中的元素个数
TrimExcess():重新设置队列的容量,因为调用Dequeue方法读取删除元素后不会重新设置队列的容量。
Contains():确定某个元素是否在队列中
CopyTo():把元素队列复制到一个已有的数组中
ToArray():返回一个包含元素的新数组
队列的更改操作
在尾部增加一个元素
Name.push(Value);
//其中Name表示要在名称为Name的队列里添加元素
//Value表示要被添加到Name里的元素的值(注:如果Value不是队列Name的类型,会报编译错误)
//无返回值
在头部删除一个元素
Name.pop();
//Name代表所要删除头部元素的队列的名称
//无返回值
访问操作
查询队列是否为空
Name.empty();
/*这个函数的返回值为bool,队列为空时为true,非空时为false
其中Name代表的是要查询的队列的名称*/
查询队列的元素个数
Name.size();
/*
这个函数的返回值为一个无符号整数,代表这个队列所包含的元素的个数
其中Name代表的是要查询的队列的名称
*/
查询队列的队首
Name.front();
/*
这个函数的返回值为一个Name的类型的值,代表这个队列的队首的值
其中Name代表的是要查询的队列的名称
*/
查询队尾的值
Name.back();
/*
这个函数的返回值为一个Name的类型的值,代表这个队列的队尾的值
其中Name代表的是要查询的队列的名称
*/
题目:青蛙跳杯子
https://www.dotcpp.com/oj/contest5130_problem2.html
算法知识:队列+dfs
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
string st,ed;
int n;
int dir[6]={-3,-2,-1,1,2,3};
map<string,int> dis;
int bfs(){
queue<string> q;
q.push(st);
dis[st]=0;
while(q.size()){
string p=q.front();
q.pop();
int d=dis[p];
int x=p.find('*');
for(int i=0;i<6;i++){
int z=x+dir[i];
if(z<0||z>=n)
continue;
swap(p[x],p[z]);
if(!dis.count(p)){
dis[p]=d+1;
if(p==ed) return dis[p];
q.push(p);
}
swap(p[x],p[z]);
}
}
return -1;
}
int main(){
cin>>st>>ed;
n=st.size();
cout<<bfs()<<endl;
}