The Doors--poj1556(最短路+判断点与线段的关系)
2024-09-30 11:01:01
http://poj.org/problem?id=1556
题目大意:从(0,5)走到(10,5)走的最短距离是多少
中间有最多18个隔着的墙 每个墙都有两个门 你只能从门通过
我的思路是 只要这两个点把能过的 就把他们的距离算出来 最后用迪杰斯塔拉算法求最短路就行了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<iostream> using namespace std;
#define N 200
const double ESP = 1e-;
#define INF 0xffffffff
int vis[N];
double dis[N];
struct node
{
double x,y;
int c;
node(double x=,double y=,int c=):x(x),y(y),c(c){}
}p[N];
node a[N][]; double G[N][N]; double dij(int s,int e)
{
memset(vis,,sizeof(vis));
for(int i=;i<e;i++)
{
dis[i]=G[s][i];
}
for(int i=;i<e;i++)
{
double Min=INF;
int dist;
for(int j=;j<e;j++)
{
if(!vis[j] && Min>dis[j])
{
Min=dis[j];
dist=j;
}
}
vis[dist]=;
for(int j=;j<e;j++)
{
if(!vis[j])
dis[j]=min(dis[j],dis[dist]+G[dist][j]);
}
}
return dis[e-];
} int main()
{
int n;
double k[N];
while(scanf("%d",&n),n!=-)
{
p[]=node(,,);
int b=;
for(int i=;i<=n;i++)
{
scanf("%lf",&k[i]);
scanf("%lf %lf %lf %lf",&a[i][].x,&a[i][].y,&a[i][].x,&a[i][].y);
p[b++]=node(k[i],a[i][].x,i);
p[b++]=node(k[i],a[i][].y,i);
p[b++]=node(k[i],a[i][].x,i);
p[b++]=node(k[i],a[i][].y,i);
}
p[b++]=node(,,n+);
for(int i=;i<b;i++)
{
for(int j=;j<b;j++)
{
G[i][j]=INF;
}
dis[i]=INF;
}
for(int i=;i<b;i++)
{
for(int j=i+;j<b;j++)
{
if(p[i].c == p[j].c)
continue;
int flag=;
for(int l=p[j].c-; l>p[i].c; l--)
{
double y=(k[l]-p[i].x)*(p[j].y-p[i].y)/(p[j].x-p[i].x)+p[i].y;
if(a[l][].x-y>ESP || (a[l][].y-y<ESP && a[l][].x-y>ESP) || (a[l][].y-y<ESP))
{
flag=;
break;
}
}
if(flag==)
{
G[i][j]=sqrt((p[j].x-p[i].x)*(p[j].x-p[i].x)+(p[j].y-p[i].y)*(p[j].y-p[i].y));
}
}
}
double aa=dij(,b);
printf("%.2f\n",aa);
}
return ;
}
最新文章
- [python]CentOS 6下安装Python2.7
- 动态链接库(DLL)总结
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q88-Q90)
- HRBUST 1326 循环找父节点神术
- c#代码画图
- createdb test时报global/pg_filenode.map不存在
- File not found images\Thumbs.db.
- 给MyEclipse 10增加SVN功能
- ClientScriptManager与ScriptManager向客户端注册脚本的区别
- DataGrid( 数据表格) 组件[4]
- oracle超过最大游标数异常分析(转贴)
- 使用Sublime Text 或 vs2017开发Node.js程序
- IIS中虚拟目录不继承主站点web.config设置的办法(转载)
- keras常见参数input_dim、input_length理解
- [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0
- 增加显示记录数的label及隐藏refresh按钮
- Vue笔记:VS Code 常用快捷键
- Shell操作mysql数据库
- 针对后台TCP服务F5健康检查配置
- Z律师:创业项目如何玩转股权众筹?
热门文章
- 使用laravel的Command实现搜索引擎索引和模板的建立
- 使用windows的fsutil命令创建指定大小及类型的测试文件
- CAD交互绘制圆(网页版)
- docker运行时设置redis密码并替换redis默认的dump.rdb
- TWaver可视化编辑器的前世今生(二)3D编辑器
- 【讲●解】KMP算法
- IDEA ctrl+alt+L 格式化快捷键无效时解决
- openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题
- 6.	COLUMN_PRIVILEGES
- 【开发工具安装配置】MyEclipse,Tomcat,Mysql安装配置