为什么最后一个点过不了
查看原帖
为什么最后一个点过不了
349857
C_z_h楼主2021/7/15 20:07
#include <bits/stdc++.h>
#define ll long long
#define maxn 1010
using namespace std;
struct node{
	double x,y,z;
	bool operator<(const node &temp)const {
        return z<temp.z;
    }
}a[maxn];
long long n,t;
double r,h;
bool mark,vis[maxn];
float dist(int i,int j){
	double b = a[i].x - a[j].x;
	double c = a[i].y - a[j].y;
	double d = a[i].z - a[j].z;
	return sqrt(b * b + c * c + d * d);
}
void dfs(ll s);
int main(){
	scanf("%lld",&t);
	while(t--){
		memset(vis,false,sizeof(vis));
		memset(a,0,sizeof(a));
		mark = false;
		scanf("%lld%lf%lf",&n,&h,&r);
		for(int i = 1;i <= n;i++){
			scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z);
		}	
		sort(a + 1,a + 1 + n);
		for(int i = 1;i <= n;i++){
			if(!mark && a[i].z - r <= 0){
				dfs(i);
			}else{
				break;
			}
		}
		if(mark){
			printf("Yes\n");
		}else{
			printf("No\n");
		}
	}
	return 0;
}
void dfs(ll s){
	if(a[s].z + r >= h){
		mark = 1;
		return ;
	}
	vis[s] = 1;
	for(int i = 1;i <= n;i++){
		if(mark){
			return ;
		}
		if(!vis[i] && dist(s,i) <= 2.00 * r){
			dfs(i);
		}
	}
}
2021/7/15 20:07
加载中...