编程语言
首页 > 编程语言> > 第十一届蓝桥杯国赛B组C/C++ 扩散

第十一届蓝桥杯国赛B组C/C++ 扩散

作者:互联网

啦啦啦
用队列广搜

#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

标签:5000,杯国赛,3011,C++,蓝桥,int,tail,3000,push
来源: https://blog.csdn.net/weixin_51732964/article/details/117374796