PTAの救助007(BFS)

昔の映画のプロットは、「ライブおよび007を死なせ」(ライブとletダイ)、007麻薬密売がワニプールの中心部にある小さな島に摘発されたが、彼は脱出することは非常に大胆な方法を取っあり - ダイレクトステッピング池大きなワニの頭部ジャンプの直列に上陸します!(スタントマンはワニが最後の足をつかんだときと言ったが、幸いだけエスケープ特別な厚手のブーツを着用しています。)

ワニプールは正方形の長さと幅として提供され、中心座標100メートル(0、0)、及び北東角座標(50、50)です。カイシンアイランドは、直径中心として(0、0)は15メートルです。ワニの所定のプールの分布を調整するために、および007 1の最大距離をジャンプすることができ、あなたは彼が脱出可能性があるかどうかを指示する必要があります。

入力フォーマット:

まず、最初の行は2つの正の整数を与える:ワニの数N(≤100)007およびDをジャンプすることができる最大距離 次いで、N行は、各行はワニを座標(x、y)が得られます。注:同じポイントに滞在するために、2匹のワニがあります。

出力フォーマット:

行の007の可能なエスケープ出力がある場合は"Yes"、そうでなければ出力が"No"

サンプル入力1:

14 20
25 -15
-25 28
8 49
29 15
-35 -2
5 28
27 -29
-8 -28
-20 -35
-25 -20
-13 29
-30 15
-35 40
12 12

出力サンプル1:

はい

サンプル入力2:

4 13
-12 12
12 12
-12 -12
12 -12

出力サンプル2:

番号

BFSソリューション

それは彼が計算される2点間の距離から呼び出される関数を書いたが、報告されたことをコードの問題を書きに来たときにでもno type named 'value_type' in 'struct node'ミスをし、新聞は何とか、後に、そのように呼ば繰り返し距離c ++機能があることを学びました、〜のような名前を取り除きます

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<list>
#include<set>
#include<cmath>
using namespace std;
typedef long long ll;
#define N 1050

typedef struct node{
	int x,y;
}Node;
Node fish[N];
int vis[N],d,n;

double dis(Node a,Node b){
	return sqrt((a.x-b.x)*(a.x-b.x) +(a.y-b.y)*(a.y-b.y));
}
queue<int> qu;
void bfs(){
	while(qu.size()){
		int e = qu.front();
		qu.pop();
		if(abs(fish[e].x-50)<=d||abs(fish[e].y-50)<=d){
			cout << "Yes" << endl;
			return ;
		}
		for(int i=0;i<n;i++){
			if(!vis[i]&&dis(fish[i],fish[e])<=d){
				qu.push(i);
				vis[i] = 1;
			}
		}
	}
	cout << "No" << endl;
}
int main() {
	cin >> n >> d;
	for(int i=0;i<n;i++){
		scanf("%d%d",&fish[i].x,&fish[i].y);
	}
	if(d>=50-7.5){
		cout << "Yes" << endl; return 0; 
	} 
	Node zero;
	zero.x = 0;zero.y = 0;
	for(int i=0;i<n;i++){
		if(dis(fish[i],zero)-7.5<=d){
			qu.push(i);
			vis[i] = 1;
		}
	}
	bfs();
	return 0;
}
公開された79元の記事 ウォン称賛37 ビュー8880

おすすめ

転載: blog.csdn.net/SinclairWang/article/details/104154037