博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenJ_POJ 1043
阅读量:4113 次
发布时间:2019-05-25

本文共 992 字,大约阅读时间需要 3 分钟。

题目方法:二分加bfs

题意:给你一个炸弹x,然后给你n个炸弹的位置,其中只能远程控制第一个炸弹爆炸,炸弹有一个爆炸范围,在此范围内,他可以引爆其他炸弹,现在想引爆炸弹x,问你炸弹的范围最小是多少

思路:其实这个题思路清晰一点就很容易想出来了,我们可以这样想,想引爆炸弹x,那么最大的爆炸范围就是1到x的距离,然后这是在一个二维坐标中,距离的大小我们只能使用二分查找,同时每一个炸弹在爆炸范围内可以引爆一定数量的炸弹,这样就成了一个bfs

一开始我一直时间超限,也不知道错在哪里,后来把写的方式改了一下,代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;const int MAXN=550;const double ITF=0.001;struct Point{ int idx; double x,y; double d;} poin[MAXN];Point pp;int n;int vis[MAXN];int add[MAXN];double dis[MAXN][MAXN];double dig(int a,int b){ double temp=sqrt((poin[a].x-poin[b].x)*(poin[a].x-poin[b].x)+(poin[a].y-poin[b].y)*(poin[a].y-poin[b].y)); return temp;}bool bfs(double d){ memset(vis,0,sizeof(vis)); queue
p; p.push(1); vis[1]=1; int cnt=0; while(!p.empty()) { cnt++; int t=p.front(); p.pop(); if(dis[t][n]<=d) { return true; } for(int i=2; i
l+0.001) { mid=l+(r-l)/2; if(bfs(mid)) { r=mid; } else l=mid; } printf("%.2lf\n",r); } return 0;}

转载地址:http://sygsi.baihongyu.com/

你可能感兴趣的文章
idea 有时提示找不到类或者符号
查看>>
matplotlib.pyplot.plot()参数详解
查看>>
MFC矩阵运算
查看>>
ubuntu 安装mysql
查看>>
c# 计算器
查看>>
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输出文件流ofstream用法详解
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>