80想知道哪里错了~~555
查看原帖
80想知道哪里错了~~555
321124
理想国の糕楼主2021/3/18 22:23
```cpp
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h> 
using namespace std;
const int maxn=1007;
struct Node{
	int x,y,z;
	
}node[maxn];
int t,n,h,r;
int vis[maxn]={0};
bool flag;
bool dOk(Node a,Node b){
	double dis=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));
	double mandis=2*double(r);
	if(dis>mandis)return false;
	return true;
}
bool cmp(Node a,Node b){
	return a.z<b.z;
}
void dfs(int id){
	
	
	//cout<<"1";
	if(node[id].z+r>=h){//到达上表面 
		flag=true;
		return;
	}
	vis[id]=1;
	for(int k=0;k<n;k++){
		if(flag)return;//无可厚非 
		if(vis[k])continue;
		if(!dOk(node[k],node[id]))continue;
	//	cout<<"去"<<k<<"\n"; 
		dfs(k);
		//恢复 
		//vis[k]=0;
	} 
} 
int main(){
	scanf("%d",&t);
	while(t--){
		memset(vis,0,sizeof(vis));
		memset(node,0,sizeof(node));
		cin>>n>>h>>r;
		for(int i=0;i<n;i++){
			//cin>>node[i].x>>node[i].y>>node[i].z;
			scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].z);
		}
		
		sort(node,node+n,cmp);
		
		
		flag=false;
		for(int i=0;i<n;i++){
			if(node[i].z-r>0)continue;//不在下表面,不是起点 
			dfs(i);
			
		}
		if(flag){
				printf("Yes\n");
			
			}
		if(!flag)printf("No\n");
	}
	return 0;
}

求教

2021/3/18 22:23
加载中...