POJ 1556 线段相交

房间最短路问题 Floyed算法 合工大 程序设计与艺术实验三 问题描述: 给定一个内含阻碍墙的房间,求解出一条从起点到终点的最短路径。房间的边界固定在x=0,x=10,y=0和y=10。起点和终点固定在(0,5)和(10,5)。房间里还有0到18个墙,每个墙有两个门。输入给定的墙的个数,每个墙的x位置和两个门的y坐标区间,输出最短路的长度。 算法思想:可以发现,最短路一定要经过墙壁的断点。 那么把房间看作一个有向图,墙壁的断点为节点,求从起点到终点的最短路。 这道题的难点在于建图。枚举所有的断点,若可以走则加入这条边。 判断两点是否连通,即为判断两点之间是否有其他墙 阅读详情
给定一个内含阻碍墙的房间,你要编程找到一条从起点到终点的最短路。

判断线段相交的题目


#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

const int n_max=105;
const int inf=1<<30;
const double precision=1e-6;

struct point
{
	double x,y;
	void add(double tx,double ty)
	{
		x=tx;
		y=ty;
	}
}p[n_max];

struct wall
{
	point low,hig;
	void add(double x1,double y1,double x2,double y2)
	{
		low.add(x1,y1);
		hig.add(x2,y2);
	}
}w[n_max];
int np,nw;
int poi[n_max][n_max];
int wal[n_max][n_max];
double d[n_max];

void init()
{
	int i;
	for(i=0;i<n_max;i++)
	{
		poi[i][0]=0;
		wal[i][0]=0;
	}
	np=0;
	nw=0;
	p[np].add((double)0,(double)5);
	poi[0][++poi[0][0]]=np;
	d[np++]=0;
}

void addpoint(int i,double x,double y)
{
	p[np].add(x,y);
	poi[i][ ++poi[i][0] ] = np;
	d[np++]=inf;
}

void addwall(int i,double x1,double y1,double x2,double y2)
{
	if(x1==x2&&y1==y2)
	{
		return ;
	}
	w[nw].add(x1,y1,x2,y2);
	wal[i][ ++wal[i][0] ] = nw++;
}

double dist(point a,point b)
{
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

int dblcmp(double d)
{
	if(fabs(d)<precision)
	{
		return 0;
	}
	return (d>0)?1:-1;
}

double det(double x1,double y1,double x2,double y2)
{
	return x1*y2 - x2*y1;
}

double cross(point a,point b,point c)
{
	return det(b.x-a.x,b.y-a.y,c.x-a.x,c.y-a.y);
}

bool segcross(point a,point b,point c,point d)  //判断线段是否相交
{
	return ( dblcmp(cross(a,c,d)) ^ dblcmp(cross(b,c,d)) ) == -2 &&
			(dblcmp(cross(c,a,b)) ^ dblcmp(cross(d,a,b)) ) == -2;
}

bool judge(int i,int pi,int j,int pj)
{
	int k,u,v,pk,c;
	v=poi[i][pi];
	u=poi[j][pj];
	for(k=j+1;k<i;k++)
	{
		for(pk=1;pk<=wal[k][0];pk++)
		{
			c=wal[k][pk];
    		if(segcross(p[u],p[v],w[c].low,w[c].hig))
    		{
    			return false;
    		}
		}
	}
	return true;
}

int main()
{
	int n;
	while(~scanf("%d",&n),n!=-1)
	{
		init();
		int i,j,pi,pj;
		double x,y1,y2,y3,y4;
		for(i=1;i<=n;i++)
		{
			scanf("%lf%lf%lf%lf%lf",&x,&y1,&y2,&y3,&y4);
			addpoint(i,x,y1);
			addpoint(i,x,y2);
			addpoint(i,x,y3);
			addpoint(i,x,y4);
			addwall(i,x,0,x,y1);
			addwall(i,x,y2,x,y3);
			addwall(i,x,y4,x,10);
		}
		addpoint(n+1,10,5);

		int u,v;
		for(i=1;i<=n+1;i++)
		{
			for(j=0;j<i;j++)
			{
				for(pi=1;pi<=poi[i][0];pi++)
				{
					for(pj=1;pj<=poi[j][0];pj++)
					{
						if(judge(i,pi,j,pj))
						{
							v=poi[i][pi];
							u=poi[j][pj];
							d[v] = min(d[v], d[u]+dist(p[u],p[v]) );
						}
					}
				}
			}
		}
		u=poi[n+1][1];
		printf("%.2lf\n",d[u]);
	}
	return 0;
}


洛谷P1354 房间最短路问题——floyd 题目描述 在一个长宽均为10,入口出口分别为(0,5)、(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经。 输入输出格式 输入格式: 第一排为n(n&lt;=20),墙的数目。 接下来n排,每排5个实数x,a1,b1,a2,b2。 x表示墙的横坐标(所有墙都是竖直的),a1-b1和a2-b2之间为空缺。 a1、b1、a2、b2保持递增,x1-xn也... 阅读详情

相关推荐

求迷宫的最短路径:现要求设计一个算法找一条从迷宫入口到出口的最短路径。

本算法要求找一条迷宫的最短路径,算法的基本思想为:从迷宫入口点(1,1)出发,向四周搜索,记下所有一步能到达的坐标点;然后依次再从这些点出发,再记下所有一步能到达的坐标点,…,依此类推,直到到达迷宫的出口点(m,n)为止,然后从出口点沿搜索路径回溯直至入口。这样就找到了一条迷宫的最短路径,否则迷宫无路径。

合工大 程序设计艺术 实验三 房间最短路径

计算几何+弗洛伊德算法求最短路径

ajajajsj的博客 664

大麦网回流票监控实战:如何利用sign参数和cookie实现自动抢票(避坑指南)

本文详细介绍了如何利用sign参数和cookie构建大麦网回流票监控系统,实现自动化抢票。通过分析大麦网票务系统的核心机制、获取关键身份凭证、逆向分析sign签名算法,并构建完整的监控系统,帮助用户高效捕捉回流票机会。文章还提供了实战避坑指南和合法合规的注意事项,确保系统稳定运行且符合平台规则。

weixin_28568819的博客 415

POJ-1556题解(附带计算几何模板)

##题意: 现在给你一个卧室的平面图,卧室里有0到18堵墙(垂直于x轴的) 固定起点(0,5),终点(10,5) 在不经过墙的情况下,要求你求出起点到终点的最短路线 ##思考: 首先题目很好理解,即在不撞到墙的情况下从求起点到终点的最短路线 首先可以知道,两点之间直线最短, 所以最优路线要么是一条直线(起点终点之间没有墙阻挡) 要么就是经过某些墙的端点的线段拼接而成(为什么是端点?加入线段不经过端点,比如说从两墙之间的空 白穿过,那么线段总可以向上或向下倾斜到墙的端点处,从而长度更小) 可以这样想,线段的

刘其琦的博客 278

将AD域服务从windows server 2008 R2 迁移到windows server 2019

添加一台windows 2019 的服务器并加入现有林的域中,并将角色升级为域控制器。然后迁移FSMO角色,使其成为PDC,然后降级旧DC,并提升域和林的功能级别。最后还要说下,Server 2008 R2我们还可以删除角色并退出当前域,这里就不做操作了。2)右键 mingling.com(我的域为mingling.com)--提升域级别功能。勾选 将域控制器添加到现有域,使用域管理员将DC2加入到现有的AD域。1)打开服务器管理器---工具---AD域和信任关系。2)运行域安装服务向导,选择下一步。

lionxam的博客 3662

LVGL的基础知识总结

另外,还有自定义字库的使用,具体可参考开发手册。

qq_28576837的博客 7395

POJ1556:最短路+线段相交

POJ1556 题解 暴力任意两个点之间连线,判断有没有线段与之相交,没有求两点之间的距离。否则inf 跑最短路,floyd方便不超时。 我对点的处理有点麻烦 x号点和y号点之间的线段编号范围 1列:1,2,3,4包含边1 2 3 2列:5,6,7,8包含边4 5 6 3列:9,10,11,12包含边7 8 9 ………… 4n-3--4n点包含边3n-2--3n x点对应的列...

FlyingJack 231

【RT-Thread】从零到一:RT-Thread Studio工程创建与程序下载全流程实战

本文详细介绍了RT-Thread Studio开发环境的安装与使用,从工程创建到程序下载的全流程实战指南。通过具体案例演示了如何在STM32平台上快速开发RT-Thread应用,包括时钟配置、内存优化、构建调试等关键技巧,帮助开发者高效完成嵌入式系统开发。

weixin_30336061的博客 546

POJ 1556 The Doors (判断线段相交+dijkstra)

The Doors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7392   Accepted: 2900 Description You are to find the length of the shortest path through a chamber c

滴水穿石,慢慢积累,总会有成果 579

通算、智算、超算:三种算力的区别与应用选型指南

算力是数字时代的基础资源,但通算、智算、超算常被混淆。通算基于CPU,支撑日常业务;智算依赖GPU/NPU,驱动AI模型训练与推理;超算以大规模并行集群实现尖端科学计算。理解三者在硬件、精度、软件生态上的差异,是合理规划算力基础设施、避免预算浪费的关键。从概念到原理,再到应用场景,本文帮你看清三种算力的真实分工与未来融合趋势。

weixin_30983965的博客 179

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1060

Poj1556线段相交判断+动规最短路

最近在SIAT做自己非常感兴趣的流动数据分析。做3D和纯开发久了,发现计算几何和图论的算法都稍微有点生疏,趁最近还不忙,刷几道相关的题目上下手当作复习。   poj1556,感觉这题算是计算几何题目里面的一个很经典的解体思路,最优值往往会离散在某些极限点上。就跟这题目一样,如果能够直接连接两点,ok;否则最短路径一定会经过中间墙上的四个点中某个点(可以自己枚举下几种情况)。剩下就用了Floyd的

算法,时空数据挖掘 5971

嵌入式系统启动流程解析:ROM Code、Bootloader与启动代码的协同工作

本文深入解析嵌入式系统从通电到运行的完整启动流程,详细阐述了ROM Code、Bootloader与启动代码三者如何像接力赛般协同工作。ROM Code作为芯片固化的初始引导程序,负责硬件自检并加载Bootloader;Bootloader作为系统总指挥,初始化关键硬件并加载操作系统内核;启动代码则为C语言运行环境铺平道路。理解这三者的分工与协作,是进行系统移植和解决启动问题的关键。

dd012的博客 554

POJ_1556_The Doors_判断线段相交+最短路

POJ_1556_The Doors_判断线段相交+最短路 Description You are to find the length of the shortest path through a chamber containing obstructing walls. The chamber will always have sides at x = 0, x = 10, y ...

168

11.8华为OD机试真题 新系统 - 寻找服务器组的最小差值下标 (Java/Py/C/C++/Js/Go)

11.8华为OD机试真题 新系统 - 寻找服务器组的最小差值下标 (Java/Py/C/C++/Js/Go)

算法大师! 210

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

POJ 1556 The Doors 判断线段相交+最短路

题目描述:http://poj.org/problem?id=1556

404

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

poj 1556 The Doors 线段相交判断+最短路

http://poj.org/problem?id=1556 求点(0,5)到(10,5)的最短距离。 图中任意两点(x座标不同)连线若没有与墙相交,则求出两点之间的距离加入最短路矩阵中,否则为无穷大。接下来用dijkstra法求最短路即可。本题主要建图比较繁琐一点。 #include<stdio.h> #include<stdlib.h> #includ...

weixin_30567471的博客 129

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

POJ 1556 The Doors (计算几何判断线段相交+最短路)

题目链接:http://poj.org/problem?id=1556 题意: 1 5 4 6 7 8 2 4 2 7 8 9 7 3 4.5 6 7 -1 房间里有n堵墙,每面墙上有两扇门,求从房间最左端中点到最右端中点的最短路径。 第一行n表示有n面墙,下面n行每行第一个数为该墙的x坐标,后面4个数为四个点的y坐标。 这题wa了好久。。最后发

Benjamin_Z的博客 774

简单几何(线段相交+最短路) POJ 1556 The Doors

题目传送门 题意:从(0, 5)走到(10, 5),中间有一些门,走的路是直线,问最短的距离 分析:关键是建图,可以保存所有的点,两点连通的条件是线段和中间的线段都不相交,建立有向图,然后用Dijkstra跑最短路。好题! /************************************************ * Author :Running_T...

weixin_34292287的博客 79

poj 1556 (Dijkstra + Geometry 线段相交)

链接:http://poj.org/problem?id=1556 The Doors Time Limit:1000MS Memory Limit:10000K Total Submissions:6216 Accepted:2495 Description You are to find the length of th...

weixin_30602505的博客 98

POJ 1556 线段与线段相交 + dijkstra

题意:一个10*10 的地图,在竖着的方向上有n个列被放置了木板,每列三个,也就是产生了两个空隙,如图,很好理解 = = 思路:首先这道题要求最短路,最后肯定是跑一个最短路,之前的建图比较麻烦,把每个列的点都存下来的话,判断两个点之间能否建边就是这个线段与其他的3*n个线段均不相交,然后建图(刚开始没存点差点没建死= =)! 代码: #include #include #include #i

黑山老猴妖的专栏 677

POJ 1556 The Doors【单源最短+线段相交】

点击打开链接 题意: 给你一个10*10的方格, 然后在里面放不超过十堵墙。然后问你从 (0,5)->(10,5)的最短路。 题解: 最短路,但是建图非常恶心,需要判断线段之间是否相交。不相交才能建边。 判断两线段是否相交。模板 double mult(Point a, Point b, Point c) { return (a.x-

zoro_n的博客 368

poj1556(线段相交模板题)

求(0,5) 到(10,5)的最短距离 对每两个点进行建边然后跑最短路 判断线段相交的方法参考这个博客:快速排斥实验和跨立实验   #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;cmath&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; usi...

bpdwn2017的博客 874

POJ 1556 The Doors(线段与线段是否相交,建图最短路,包含模板)

计算几何跟图论的结合,判断线段与线段之间是否有交点。

weixin_48024524的博客 124

POJ 1556 The Doors(线段相交)

最近刚刚开

丁丁丁丁丁 631

POJ 1556 - The Doors 线段相交不含端点

POJ 1556 - The Doors题意: 在 10x10 的空间里有很多垂直的墙,不能穿墙,问你从(0,5) 到 (10,5)的最短距离是多少. 分析: 要么直达,要么一定是墙的边缘点之间以及起始点、终点的连线. 所以先枚举墙上每一点到其他点的直线可达距离,就是要判定该线段是否与墙相交(不含端点). 然后最短路. 1 ...

weixin_33862993的博客 160
上一篇: 梅森素数 & 完美数
下一篇: POJ 2653 线段相交
MakingMaker
博客等级 码龄15年 6粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值