2969-Moocast
本文总阅读量次
题目只告诉我们坐标和点权,如何做图的遍历?
对讲机功率大于等于两点之间的距离,才能把消息广播到下一头奶牛,距离在哪?
所以先要解决构图,图构造出来了才能遍历。至于两点之间的距离可以用勾股定理来计算。
距离计算
double dis(int x1, int y1, int x2, int y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
构图
for(int i = 1; i <= n; i+++)
cin>>x[i]>>y[i]>>w[i]; //注意,x和y不是顶点编号,而是坐标,不能用来构图
构图考虑的是顶点与顶点,但这题告诉我们的是坐标,所以我们先要枚举顶点进行构图。
for(int i = 1; i < n; i++)
for(int j = i+1; j <= n; j++)
G[i][j]=G[j][i]=dis(x[i],y[i],x[j],y[j]);
注意,G数组也要
遍历
void dfs(int i)
{
cnt++; //全局变量,记录访问的顶点个数,即奶牛数量
for(int j = 1; j <= n; j++){
if(v[j]==0 &&G[i][j]<=w[i]){ //边权小于等于点权,能够广播到
v[j] = 1;
dfs(j);
}
}
}