这是一篇对队列完全没有概念的人讲述队列的一篇文章(本人也刚学会)
首先我们来谈谈数据结构
众所周知深搜用的是栈一个一搜到底在慢慢退回退到头结束的算法
不太难对吧,宽搜则是使用队列的一种算法是将一个点可以到的点全部到一遍再向里搜
以前我是这么写的就以马的遍历为例吧
#include<bits/stdc++.h>
using namespace std;
int dx[9]={0,-2,-1,1,2,2,1,-1,-2};//定义走向
int dy[9]={0,1,2,2,1,-1,-2,-2,-1};
int ans,n,m,x,y,t=1,w=1,a[405][405],nx=1,ny=1;
struct node{
int x,y,z;
}h[160005];//模拟队列的结构体
int main()
{
cin>>n>>m>>x>>y;
memset(a,-1,sizeof(a));
a[x][y]=0;
h[1].x=x;//x坐标
h[1].y=y;//y坐标
h[1].z=0;//走到x,y的步数
t=w=1;//头尾
while(t<=w)
{
for(int i=1;i<=8;i++)//8个方向
{
int nx=h[t].x+dx[i];
int ny=h[t].y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m
&&a[nx][ny]==-1)
{
w++;
h[w].x=nx;//w仅仅是一个编号很好理解
h[w].y=ny;
a[nx][ny]=h[t].z+1;
h[w].z=a[nx][ny];
}
}
t++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<left<<setw(5)<<a[i][j];
cout<<endl;
}
return 0;
}//撒花
这很好理解对吧适合新人去用
而队列不太一样。
首先他也是STL但他的长度是动态的,所以他是一种特殊的线性表有队头和队尾。
那先来讲定义吧。
queue<一个数据类型以int为例>一个名称以q为例
q.push(x)(x为一个数)将x放入队列中
q.front()(取出队头)
q.pop()把队头出队
把他们放入一个代码里吧
#include<bits/stdc++.h>
using namespace std;
queue<int>q;
int n,x,t;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
q.push(x);//让x进入队列
}
while(!q.empty())
{
t=q.front(); //取出队列最前面的对头数据
cout<<t<<" ";
q.pop(); //把对头出队
}
return 0;
}