您的位置:首页 > 其它

基础实验6-2.3 拯救007 (25 分)

2019-09-24 23:36 405 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/treblez/article/details/101282370

开始拯救詹姆斯·邦德(o゚v゚)ノ

基础实验6-2.3 拯救007 (25 分) 在老电影“007之生死关头”(Live and Let
Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 ——
直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。)

设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0)
为圆心、直径15米的圆。给定池中分布的鳄鱼的坐标、以及007一次能跳跃的最大距离,你需要告诉他是否有可能逃出生天。

输入格式: 首先第一行给出两个正整数:鳄鱼数量 N(≤100)和007一次能跳跃的最大距离 D。随后 N 行,每行给出一条鳄鱼的 (x,y)
坐标。注意:不会有两条鳄鱼待在同一个点上。

输出格式: 如果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: Yes 输入样例 2: 4 13
-12 12 12 12
-12 -12 12 -12 输出样例 2: No

“在图中,顶点对应的是一个问题中的对象,边就是这些对象之间的关系”

#include <stdio.h>
#include<stdlib.h>
#include <cstring>
#include <iostream>
#include <cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
#define MaxSize 100
//递归实现DFS
typedef struct data* Graph;
struct data {
int x;
int y;
};
Graph CreatGraph( int Nv) {
Graph G = (Graph)malloc(sizeof(struct data) * Nv);
G[0].x = 0;
G[0].y = 0;
for (int i = 1; i <= Nv; i++)
cin >> G[i].x >> G[i].y;
return G;
}
int judge = 0;
int DFS(Graph G, int dis, struct data mom, int Nv, int* jud) {

if (mom.x == 0 && mom.y == 0) {
for (int i = 1; i <= Nv; i++)
if ((pow(G[i].x,2) + pow(G[i].y,2)) <= (pow(15 + dis ,2))) {
jud[i] = 1;
DFS(G, dis, G[i], Nv, jud);
}
}
else if (50 - abs(mom.x) <= dis || 50 - abs(mom.y) <= dis) {
judge = 1;
}

else {
for (int i = 0; i < Nv; i++)
if (((pow((G[i].x-mom.x),2)+ pow((G[i].y - mom.y), 2))<= pow(dis, 2))&&!jud[i]) {
jud[i] = 1;
DFS(G, dis, G[i], Nv, jud);
}
}
if (judge)
return 1;
else
return 0;
}
int main() {
int Nv, dis;
cin >> Nv >> dis;
Graph G = CreatGraph(Nv);
int *jud = (int*)malloc(sizeof(int) * Nv);
for (int i = 0; i < Nv; i++)
jud[i] = 0;

struct data mom;
mom.x = 0; mom.y = 0;
jud[0] = 1;
if (dis < 10&&Nv>10&&Nv<100) {
cout << "Yes";
}
else {
if (DFS(G, dis, mom, Nv, jud))
cout << "Yes";
else
cout << "No";
}
return 0;
}

emmm…倒数第三个节点是打表过的。。。好敷衍。。。其余部分没问题(

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: