just bfs
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
using namespace std;
int n,d;
struct P
{
int x,y;
double dis;
}p[105];
int vis[105];
double cal(int x,int y)
{
return sqrt(x*x+y*y)-15;//计算出鳄鱼到中心陆地边缘的距离
}
void BFS()
{
queue<P> q;
for(int i=1;i<=n;i++)
{
if(p[i].dis<=d)//一开始选出最靠近岸边的鳄鱼
{
q.push(p[i]);
vis[i]=1;
}
}
while(!q.empty())
{
P node=q.front();
if(node.x+d>=50 || node.x-d<=-50 || node.y+d>=50 || node.y-d<=-50)
{
printf("Yes\n");
return ;
}
q.pop();
for(int i=1;i<=n;i++)
{
if(!vis[i] && node.dis+d>=p[i].dis)
{
q.push(p[i]);
vis[i]=1;
}
}
}
printf("No\n");
}
int main()
{
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&d);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
p[i].dis=cal(p[i].x,p[i].y);
}
BFS();
return 0;
}