//bfs
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
typedef long long LL;
struct node{
int time,num,v;
node(int time,int num,int v):time(time),num(num),v(v) {}
};
vector<int>G[205];
bool done[205];
int n,m,k,r;
int bfs()
{
memset(done,false,sizeof(done));
done[1]=true;
queue<node>pq;
while(!pq.empty()) pq.pop();
pq.push(node(0,0,1));
while(!pq.empty())
{
node k1=pq.front();
pq.pop();
if(k1.v==2) return k1.num-1;
for(int i=0;i<G[k1.v].size();i++)
{
node f=k1;
f.v=G[k1.v][i];
if(!done[f.v]) {
if(f.v>n)
{
if(++f.time<=k) {
done[f.v]=true;
f.num++;
pq.push(f);
}
}
else {
f.num++;
done[f.v]=true;
pq.push(f);
}
}
}
}
}
int main()
{
int x[205],y[205];
scanf("%d%d%d%d",&n,&m,&k,&r);
for(int i=1;i<=n+m;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=1;i<n+m;i++)
for(int j=i+1;j<=n+m;j++)
if((LL)(x[j]-x[i])*(x[j]-x[i])+(LL)(y[j]-y[i])*(y[j]-y[i])<=(LL)r*r) {
G[i].push_back(j);
G[j].push_back(i);
}
printf("%d\n",bfs());
return 0;
}
ccf 201403-4 无线网络 bfs变形
最新推荐文章于 2024-04-25 12:48:42 发布
