2020蓝桥杯决赛 扩散

啦啦啦
用队列广搜

#include<queue>
#include<stdio.h>
using namespace std;
int sum=0,e[10000][10000];
int net[4][2]={0,1,0,-1,1,0,-1,0};
struct paix
{
	int x,y,s;
}head,tail;
void bfs()
{
	queue<paix>q;
	e[3000][3000]=e[5020][3011]=e[3011][3014]=e[5000][5000]=1;
	tail.x=3000,tail.y=3000,tail.s=0;
	q.push(tail);
	tail.x=5020,tail.y=3011,tail.s=0;
	q.push(tail);
	tail.x=3011,tail.y=3014,tail.s=0;
	q.push(tail);
	tail.x=5000,tail.y=5000,tail.s=0;
	q.push(tail);
	while(!q.empty())
	{
		head=q.front();
		q.pop();
		for(int k=0;k<4;k++)
		{
			tail.x=head.x+net[k][0];
			tail.y=head.y+net[k][1];
			tail.s=head.s+1;
			if(e[tail.x][tail.y]==0&&tail.s<=2020)
			{
				e[tail.x][tail.y]=1;
				q.push(tail);
				sum++;
			}
		}
	}
	return ;
}
int main()
{
	bfs();
	printf("%d",sum+4);
	return 0;
}

答案:20312088

posted @ 2021-05-28 21:42  新城R  阅读(44)  评论(0)    收藏  举报