算法5-5:线段交叉问题

问题

给定一系列线段,每条线段可以是水平或者竖直。求相交的线段

解决

算法的基本思想是先将线段以x坐标进行排序。做一条扫描线,从左往右扫描,也就是下图中的红线。

当进入一条水平的线时,记录该线段的y坐标。

当走出水平线时,从二叉查找树中删除该线段的y坐标。

当遇到竖直的线时,判断该线段范围内有无之前记录的坐标即可判断两线是否相交。

算法5-5:线段交叉问题,布布扣,bubuko.com

时间: 2024-10-12 15:03:46

算法5-5:线段交叉问题的相关文章

【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵

https://vjudge.net/contest/66989#problem/A 单点修改,区间查询 方法一:线段树 http://www.cnblogs.com/kuangbin/archive/2011/08/15/2139834.html 1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<cmath> 6 #

算法导论学习-线段树(1)

1. 线段树简介: --------------- 线段树是建立在线段的基础上,每个结点都代表了一条线段[a,b].长度为1的线段称为元线段.非元线段都有两个子结点,左结点代表的线段为[a,(a + b) / 2],右结点代表的线段为[((a + b) / 2)+1,b].若非元线段的编号为 i,那么他的左孩子编号为 2*i,右孩子为 2*i+1.下图是一棵典型的线段树.,一般的,我们把根节点的编号设为1,那么下图很显然的,[1,5]的编号为2,[6,10]的编号为3,其他节点也以此类推. 2.

算法导论学习-线段树(2)

线段树(1)http://www.cnblogs.com/fu11211129/p/4230000.html 1. 线段树应用之动态点插与统计: -------------------------------- 线段树(1)中讲的应用是区段的插值与统计,我们在线段树结构体中接入cover之一域,cover等于0表示该节点所代表的区域并没有被完全覆盖,cover大于等于1表示该节点所代表区域已经被完全覆盖,用线段树(1)博客里面的图来说明一下:           如上图所示,我们最后统计的时候是

10.25算法训练——裸线段树

题目大意:对N(1<=N<=50000)个数进行连续进行M(1<=M<=200000)次询问:问1-N之间任意连续区间最大值和最小值之差. 之前学过线段树,学的是模版题,求解的问题是在一段区间内任意加减,然后再询问任意一段之区间的和. 这次的问题和之前学的模版题相同之处是:查询的是一段连续区间的信息. 不同之处在于:区间求和问题需要在线段树的每个结点记录其左儿子和右儿子所有结点之和.也就是说每个结点的信息是一个数. 所以之后的查询操作,也是不断去访问线段树的结点,将这些结点上的数加

梁友栋算法用多边形裁剪线段

// 计算机图形学View.cpp : C计算机图形学View 类的实现// #include "stdafx.h"#include"math.h"// SHARED_HANDLERS 可以在实现预览.缩略图和搜索筛选器句柄的// ATL 项目中进行定义,并允许与该项目共享文档代码.#ifndef SHARED_HANDLERS#include "计算机图形学.h"#endif #include "计算机图形学Doc.h"#i

nyoj 119士兵杀敌(三)(线段树区间最值查询,RMQ算法)

题目119 题目信息 执行结果 本题排行 讨论区 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军统率着N个士兵,士兵分别编号为1~N,南将军常常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比較,计算出两个人的杀敌数差值.用这样的方法一方面能鼓励杀敌数高的人,还有一方面也算是批评杀敌数低的人,起到了非常好的效果. 所以,南将军常常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少. 如今,请你写一个程

[计算机图形学 with OpenGL] Chapter8 习题8.6 线段旋转后使用Cohen-Sutherland算法裁剪

习题8.6 生成一条比观察窗口对角线还长的线段动画,线段重点位于观察窗口中心,每一帧的线段在上一帧基础上顺时针旋转一点,旋转后用Cohen-Sutherland线段裁剪算法进行裁剪. 步骤: 1 视口范围:(-100, -100)到(100, 100): 2 裁剪窗口区域:winMin(-50, -50) 到 winMax(50, 50),原始端点:p0(-100, 0)到 p1(100, 0) 3 使用Bresenham算法画原始线段,使用Cohen-Sutherland算法画裁剪线段: 4

POJ 3667 线段树区间合并

http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html 用线段树,首先要定义好线段树的节点信息,一般看到一个问题,很难很快能确定线段树要记录的信息做线段树不能为了做题而做,首先线段树是一种辅助结构,它是为问题而生的,因而必须具体问题具体分析回忆一下RMQ问题,其实解决RMQ有很多方法,根本不需要用到线段树,用线段树解决RMQ,其实是利用线段树的性质来辅助解决这个问题回忆一下求矩形面积并或周长并的问题,一般使用的是扫描

如何开发一个异常检测系统:如何评价一个异常检测算法

利用数值来评价一个异常检测算法的重要性 使用实数评价法很重要,当你用某个算法来开发一个具体的机器学习应用时,你常常需要做出很多决定,如选择什么样的特征等等,如果你能找到如何来评价算法,直接返回一个实数来告诉你算法的好坏,那样你做决定就会更容易一些.如现在有一个特征,要不要将这个特征考虑进来?如果你带上这个特征运行你的算法,再去掉这个特征运行你的算法,得到返回的实数,这个实数直接告诉你加上这个特征算法是变好了还是变坏了,这样你就有一种更简单的算法来确定是否要加上这个特征. 为了更快地开发出一个异常