问题描述:
地图无限大,初始点(0, 0), (2020, 11), (11, 14), (2000, 2000)。总共扩散2020次,问总共可以扩散多少点(重复点不计数)。
思路:
多源BFS,初始点为4个,需要加上计时(具体代码中有注释)。
#include<bits/stdc++.h>
using namespace std;
const int p=2500;
long long cnt=4;
bool vis[10000][10000];
int xx[4]={0,1,0,-1};
int yy[4]={1,0,-1,0};
struct node
{
int x,y,t;//加上计时变量t
};
queue<node> q;
int main()
{
vis[0+p][0+p]=vis[2020+p][11+p]=vis[11+p][14+p]=vis[2000+p][2000+p]=1;
q.push((node){0+p,0+p,0});
q.push((node){2020+p,11+p,0});
q.push((node){11+p,14+p,0});
q.push((node){2000+p,2000+p,0});
int nx,ny,dx,dy,t;
while(!q.empty())
{
nx=q.front().x,ny=q.front().y,t=q.front().t;
q.pop();
//cout<<nx-p<<" "<<ny-p<<" "<<t<<endl;
for(int i=0;i<4;i++)
{
dx=nx+xx[i];
dy=ny+yy[i];
if(t+1<=2020&&!vis[dx][dy])
{
vis[dx][dy]=1;
cnt++;
q.push((node){dx,dy,t+1});
}
}
}
cout<<cnt;
return 0;
}