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 ;
}

The Doors--poj1556(最短路+判断点与线段的关系)的更多相关文章

  1. POJ1556 最短路 + 线段相交问题

    POJ1556 题目大意:比较明显的题目,在一个房间中有几堵墙,直着走,问你从(0,5)到(10,5)的最短路是多少 求最短路问题,唯一变化的就是边的获取,需要我们获取边,这就需要判断我们想要走的这条 ...

  2. Broken line - SGU 124(判断点与多边形的关系)

    题目大意:RT 分析:构造一条射线,如果穿越偶数条边,那么就在多边形外面,如果穿越奇数条边,那么就在多边形里面. 代码如下: ===================================== ...

  3. 判断直线与线段相交 POJ 3304 Segments

    题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点. 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交. 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1 ...

  4. C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系

    最近在做一些简单的图像对比工作,总结了一些GDI+对象的使用方式,记录下来共享给大家使用. 判断Rectangl与多边形的关系 /// <summary> /// 是否包含输入范围 /// ...

  5. .NET(C#):判断Type类的继承关系

    //Type类的函数 class Type bool IsInstanceOfType(object); //判断对象是否是指定类型 //类型可以是父类,接口 //用法:父类.IsInstanceOf ...

  6. POJ 3304 Segments (判断直线与线段相交)

    题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...

  7. POJ 3304 Segments(判断直线与线段是否相交)

    题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...

  8. POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

    首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...

  9. POJ1556 The Doors 叉积+最短路

    题目大意:求从(0,5)到(10,5)的最短距离,起点与终点之间有n堵墙,每个墙有2个门. 题目思路:判断两点间是否有墙(判断两点的连线是否与某一堵墙的线段相交),建立一个图,然后最短路求出就可以了. ...

随机推荐

  1. 推荐一个有趣的Chrome扩展程序-查看任意网站的开发技术栈

    对于前端开发人员来说,目前的前端框架层出不穷,最受欢迎的莫过于所谓的前端框架三驾马车:Angular, React和Vue.在学习的过程中,肯定好奇现在的互联网公司的网站用的何种前端框架来开发的. C ...

  2. About App Sandbox

    沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限. 沙盒技术提供对资源的严格控制,沙盒通过限制对内存.系统文件和设置的访问,沙盒可以让企业可通过执行潜在恶意代 ...

  3. docker 新手入门 (web项目的部署)

    web项目的部署 1.首先我们下载centos镜像.docker pull centos 2.下载完成之后,我们首先要安装的是java环境  tomcat 和jdk 3.将下载好的软件放入到nmt目录 ...

  4. flask学习规划

    实现基本登录注册: 留言板功能: 并且部署到服务器: 预计完成时间6.16:. 后续页面美化: 各种其他功能的探索一个月时间: 并行地学习python,java,css,html,js,sql 暑假预 ...

  5. eclipse下svn的分支与合并指南 - 更新版

    http://wenku.baidu.com/link?url=ul5vzBHZpHgzENp46RQwTYrkCUYLeVg9TuhmPM_qisR1BGzp6Qca7onhS-SOzwDYuYdA ...

  6. Linux test命令

    test命令 长格式的例子: test "$A" == "$B" && echo "Strings are equal" t ...

  7. php函数之数组

    关联数组 isset bool isset( mixed $val [, mix $...]) 变量是否已设置并且非null.多个参数从左到右计算. 判断null $a=null;var_dump(i ...

  8. POJ 1414 Life Line(搜索)

    题意: 给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子. 然后到C(1<=N<=9)棋手在空位放上自己序号C ...

  9. 优化子查询sql语句为内连接

    背景: 希望提高查询的效率,从sql语句中频繁出现的子查询入手. 数据表如下:Student表中的CityCode对应于City表中的Code. Student表:                   ...

  10. react 语法细节总结说明

    1.当要获取某个数据列表中的某个字段时,用“.”附加的形式.例如:获取user中的balance字段,用this.props.user.balance 来表示. 2.当要打印某个数据或字段结果时,co ...