AT_abc304_c的题解
(一)
这题,可以用一种类似于 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;
}