L2-1 拯救007(升级版) (25 分)

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

设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布的鳄鱼的坐标、以及007一次能跳跃的最大距离,你需要给他指一条最短的逃生路径 —— 所谓“最短”是指007要跳跃的步数最少。

输入格式:

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

输出格式:

如果007有可能逃脱,首先在第一行输出007需要跳跃的最少步数,然后从第二行起,每行给出从池心岛到岸边每一步要跳到的鳄鱼的坐标 (x,y)。如果没可能逃脱,就在第一行输出 0 作为跳跃步数。如果最短路径不唯一,则输出第一跳最近的那个解,题目保证这样的解是唯一的。

输入样例 1:

17 15
10 -21
10 21
-40 10
30 -50
20 40
35 10
0 -10
-25 22
40 -40
-30 30
-10 22
0 11
25 21
25 10
10 10
10 35
-30 10

输出样例 1:

4
0 11
10 21
10 35

输入样例 2:

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

输出样例 2:

0

拿BFS做的,有一个样例没过去,还有6分没得到,希望以后能改过来

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef pair<int,int> P;
typedef long long ll;
const int maxn = 100 + 10;
int n,dax,dax2,p[maxn],vis[maxn];
struct node
{int no,x,y,step;node() {}node(int id,int a,int b,int e):no(id),x(a),y(b),step(e) {}bool operator <(const node & r)const{int dx = abs(x - r.x);int dy = abs(y - r.y);return dx < dy;}
} mp[maxn];
//map<int,node> mp;
int bfs()
{memset(p,-1,sizeof(-1));memset(vis,0,sizeof(vis));vis[0] = 1;queue<node> q;q.push(node(0,0,0,1));while(!q.empty()){node now = q.front();q.pop();
//        printf("u:%d %d %d\n",now.no,now.x,now.y);if(now.x + dax >= 50 || now.y + dax >= 50){printf("%d\n",now.step);return now.no;}for(int i = 1; i <= n; i++){if(vis[i]) continue;int dx = abs(mp[i].x - now.x);int dy = abs(mp[i].y - now.y);if(now.x == 0 && now.y == 0){if(dx * dx + dy * dy <= (dax + 7.5) * (7.5 + dax)){vis[i] = 1;p[i] = now.no;q.push(node(i,mp[i].x,mp[i].y,now.step + 1));}}else if(dx * dx + dy * dy <= dax2){
//                printf("v:%d %d %d\n",i,mp[i].x,mp[i].y);vis[i] = 1;p[i] = now.no;q.push(node(i,mp[i].x,mp[i].y,now.step + 1));}}}return -1;
}
int main()
{int u,v;scanf("%d%d",&n,&dax);dax2 = dax * dax;for(int i = 1; i <= n; i++){scanf("%d%d",&u,&v);mp[i] = node(i,u,v,0);}sort(mp + 1,mp + n + 1);for(int i = 1;i <= n;i++) mp[i].no = i;int ans = bfs();if(ans == -1) printf("0\n");else{stack<int> s;for(int i = ans; i != -1; i = p[i]){s.push(i);}s.pop();while(s.size()){int id = s.top(); s.pop();printf("%d %d\n",mp[id].x,mp[id].y);}}return 0;
}

L2-1 拯救007(升级版)相关推荐

  1. 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)

    本次笔记内容: 6.3 应用实例:拯救007 6.4 六度空间 文章目录 拯救007 题目与分析 题目 分析 总体算法 六度空间(Six Degrees of Separation) 题目 算法思路 ...

  2. PTA_拯救007 (25 分)【简单DFS+特判】

    题目链接:7-9 拯救007 (25 分) AC代码: 代码中有注释 #include<iostream> #include<algorithm> #include<cs ...

  3. 基础实验6-2.3 拯救007 (25分) [浙大版《数据结构学习与实验指导(第2版)》]

    题目连接:基础实验6-2.3 拯救007 (25分) 在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一 ...

  4. 拯救007(升级版) 解题报告

    题目: 在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 -- 直接踩着池子里一系 ...

  5. PTA 7-11 拯救007 基础dfs

    在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 -- 直接踩着池子里一系列鳄鱼的 ...

  6. 拯救007 (dfs)

    在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 -- 直接踩着池子里一系列鳄鱼的 ...

  7. PAT 7-12 拯救007

    在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 -- 直接踩着池子里一系列鳄鱼的 ...

  8. 7-10 拯救007 (25 分)

    在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 -- 直接踩着池子里一系列鳄鱼的 ...

  9. 【图(上)】拯救007

    题目说明: 在老电影"007之生死关头"(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 -- 直接踩着池子里 ...

最新文章

  1. 基于蔡氏混沌电路进行非线性共振探究
  2. Coursera Algorithms week1 算法分析 练习测验: Egg drop 扔鸡蛋问题
  3. get与post区别
  4. html form callback,Promise异步编程模式总结初始化Promise对象统一错误处理PromisifyfromCallbackMongoose Promisify...
  5. redis集群如何解决重启不了的问题
  6. 批处理批量创建域用户
  7. java网络通信:伪异步I/O编程(PIO)
  8. java----动态绑定
  9. Arduboy 游戏机制作参考教程
  10. Securing Big Data Provenance for Auditors: The Big Data Provenance Black Box as Reliable Evidence
  11. 【每天一个 Linux 命令】ssh 命令
  12. 小米笔记本充电实测追求速度牺牲兼容性小米笔记本充电驱动_开学劲薄之高性价比笔记本电脑选购指南...
  13. 科技爱好者周刊:第 74 期
  14. matlab 反步法,反步法的Matlab仿真学习程序
  15. IDEA最全最常用的配置与性能优化(Java必备)
  16. java 红绿灯_java -- GUI 红绿灯
  17. 赞!走心推荐这几个 BAT 大佬的公众号
  18. 百度贴吧推广技巧:故事型营销思维
  19. su Authentication failure解决方法
  20. TWAIN开发实战:10分钟内实现web应用中的扫描仪调用!

热门文章

  1. 全息展柜可以用于哪些领域使用?优势有什么?
  2. 桌面html倒计时如何添加,静态html实现倒计时
  3. geoJson 下载
  4. 电商平台-订单表的设计
  5. 日期时间脚本库方法列表
  6. 魅族mx3升级到android6.0,魅族魅蓝6官方完整版固件系统升级更新包:Flyme 7.3.0.0A...
  7. 深度学习工程实践 1.Dlib的使用
  8. 新年第一弹:吐蛇一下2013春晚
  9. Echats关系图les-miserables的图表详细解析(和弦图)(一)
  10. 一名IT从业者的英语口语能力成长路径