双队列BFS也可以
2024-01-14 11:27:29
发布于:广东
35阅读
0回复
0点赞
一个队列维护新产生的病毒,一个队列用来BFS即可。
#include <bits/stdc++.h>
#include <queue>
using namespace std;
struct node{
int x;
int y;
};
char a[1001][1001];
int n,m,cnt=0,stx,sty;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
queue<node>q,q2;
void bfs()
{
for(int i=2;i<=m;++i)
{
while(!q.empty())
{
node t = q.front();
q.pop();
for(int i=0;i<4;++i)
{
int nx = dx[i] + t.x;
int ny = dy[i] + t.y;
if(nx>=1 and ny>=1 and ny<=n and nx<=n and a[nx][ny]=='.')
{
q2.push({nx,ny});
cnt++;
a[nx][ny]='@';
}
}
}
while(!q2.empty())
{
q.push(q2.front());
q2.pop();
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
cin>>a[i][j];
}
}
cin>>m;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(a[i][j]=='@')
{
cnt++;
stx = i;
sty = j;
q.push({stx,sty});
}
}
}
bfs();
cout<<cnt;
return 0;
}
//A8001.流感传染
这里空空如也
有帮助,赞一个