Saving James Bond - Easy Version
#include<stdio.h>
#include<stdlib.h>
#include<cstdio>
#include<iostream>
#include<stack>
#include<queue>
#include<cmath>
#include<string.h>
using namespace std;
#define MaxVerNum 1000
int n,d;
int Visited[MaxVerNum]={0};
struct Node
{
int x,y;
}M[MaxVerNum];
bool IsSave(int v)
{
int x,y;
double dis;
x=abs(M[v].x);
y=abs(M[v].y);
if(x+d>=50||y+d>=50)
return true;
else
return false;
}
bool Jump(int a,int b)
{
int x=M[a].x-M[b].x;
int y=M[a].y-M[b].y;
double dis=sqrt((double)(x*x)+(double)(y*y));
if(dis<=d)
return true;
else
return false;
}
int DFS(int v)
{
Visited[v]=1;
int ans=0;
if(IsSave(v))
ans=1;
else
{
for(int i=0;i<=n;i++)
{
if(Visited[i]==0&&Jump(v,i))
ans=DFS(i);
if(ans==1)
break;
}
}
return ans;
}
bool FirstJump(int v)
{
int x,y;
double dis;
x=M[v].x;
y=M[v].y;
dis=sqrt((double)(x*x)+(double)(y*y));
if(dis<=d+7.5)
return true;
else
return false;
}
void Save()
{
int ans;
for(int i=0;i<=n;i++)
{
if(Visited[i]==0&&FirstJump(i))
{
ans=DFS(i);
if(ans==1)
break;
}
}
if(ans==1)
cout<<"Yes" <<endl;
else
cout<<"No"<<endl;
}
int main()
{
cin>>n>>d;
M[0].x=0;
M[0].y=0;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
M[i].x=a;
M[i].y=b;
}
Save();
return 0;
}