(一)
這題,可以用一種類似於 BFS 的方法。
一開始,先把 \(1\) 號點放入佇列。
用 \(head\) 和 \(tail\) 記錄當前未處理的頭和尾。
對於每一個點,查詢符合的點,放入佇列。
(二)
AC 程式碼。
#include<bits/stdc++.h>
using namespace std;
int n,d,x[2001],y[2001],a[20001];
bool vis[2001];
int js(int p,int q){
return (x[p]-x[q])*(x[p]-x[q])+(y[p]-y[q])*(y[p]-y[q]);
}
int main(){
int head=0,tail=1;
cin>>n>>d;
for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
vis[1]=1;
a[1]=1;
while(head<tail){
head++;
for(int i=1;i<=n;i++){
if(vis[i])continue;
if(js(i,a[head])<=d*d){
vis[i]=1;
a[++tail]=i;
}
}
}
for(int i=1;i<=n;i++){
if(vis[i])cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}