思路:广搜
提示:如果直接从给的四个初始坐标开始搜的话可能会得到负数所以我们把坐标都加上2020;
#include<stdio.h>
#include"string.h"
#include<algorithm>
#include<queue>
using namespace std;
struct l
{
int x,y,s;
}tail,head;
int book[10000][10000];
int main()
{
memset(book,0,sizeof(book));
int net[4][2]={{0,1},{0,-1},{1,0},{-1,0}},k,ans=0,i,j;
queue<l>q;
tail.s=0;
tail.x=2020;
tail.y=2020;
q.push(tail);
tail.s=0;
tail.x=4040;
tail.y=2031;
q.push(tail);
tail.s=0;
tail.x=2031;
tail.y=2034;
q.push(tail);
tail.s=0;
tail.x=4020;
tail.y=4020;
q.push(tail);
book[2020][2020]=book[4040][2031]=book[2031][2034]=book[4020][4020]=1;
while(!q.empty())
{
head=q.front();
q.pop();
for(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(book[tail.x][tail.y]==0&&tail.s<=2020)
{
book[tail.x][tail.y]=1;
//tail.s=head.s+1;
ans++;
q.push(tail);
}
}
}
printf("%d\n",ans+4);
ans=0;
/*for(i=0;i<=8000;i++)
{
for(j=0;j<=8000;j++)
{
if(book[i][j]==1)ans++;
}
}
printf("%d",ans);*/
return 0;
}
答案20312088