POJ 1066 两线段的规范相交
来源:互联网 发布:svd推荐算法 python 编辑:程序博客网 时间:2024/05/20 15:57
题意:现在有一个方框,有n条线段分割这个方框,线段的断点均在方框的边上,求从方框外面到方框内某一点所穿过的最少的线段数,过两线段交点记作一条。
思路:两线段规范相交的模板题。
#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>#define LL long long#define PI (acos(-1))#define EPS (1e-4)using namespace std;struct P{ double x,y;}p[80];struct L{ P p1,p2;}line[50];double X_Mul(P a1,P a2,P b1,P b2){ P v1 = {a2.x-a1.x,a2.y-a1.y},v2 = {b2.x-b1.x,b2.y-b1.y}; return v1.x*v2.y - v1.y*v2.x;}double Cal_Point_Dis(P p1,P p2){ return sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));}P Cal_Segment_Cross_Point(P a1,P a2,P b1,P b2){ double t = X_Mul(b1,b2,b1,a1) / X_Mul(a1,a2,b1,b2); P cp = {a1.x+(a2.x-a1.x)*t,a1.y+(a2.y-a1.y)*t}; return cp;}bool Is_Seg_Cross(P a1,P a2,P b1,P b2){ double xm1 = X_Mul(a1,a2,a1,b1); double xm2 = X_Mul(a1,a2,a1,b2); double xm3 = X_Mul(b1,b2,b1,a1); double xm4 = X_Mul(b1,b2,b1,a2); return (xm1*xm2 < (-EPS) && xm3*xm4 < (-EPS));}int Cal_Minimum_Doors(L *line,int n,P tr,P *p,int top){ int i,j; int Min = 10000000,temp; for(i = 0;i < top; ++i) { for(j = 0,temp = 1;j < n; ++j) { if(Is_Seg_Cross(tr,p[i],line[j].p1,line[j].p2)) { temp++; } } Min = (Min < temp ? Min : temp); } return Min;}int main(){ int top,n,i; P tr; while(scanf("%d",&n) != EOF) { top = 0; for(i = 0; i < n; ++i) { scanf("%lf %lf %lf %lf",&line[i].p1.x,&line[i].p1.y,&line[i].p2.x,&line[i].p2.y); p[top++] = line[i].p1; p[top++] = line[i].p2; } p[top].x = 0; p[top++].y = 0; p[top].x = 0; p[top++].y = 100; p[top].x = 100; p[top++].y = 0; p[top].x = 100; p[top++].y = 100; scanf("%lf %lf",&tr.x,&tr.y); printf("Number of doors = %d\n",Cal_Minimum_Doors(line,n,tr,p,top)); } return 0;}
- POJ 1066 两线段的规范相交
- poj 4048 Chinese Repeating Crossbow 线段规范相交的判断
- POJ 1066 线段相交
- POJ 1066 线段相交
- POJ 1066 线段相交
- POJ 1066 Treasure Hunt 判断两线段是否相交
- POJ 2653 Pick-up sticks 枚举 + 判断两线段规范相交
- POJ 1410 Intersection(线段非规范相交)
- POJ 1066 判断线段相交
- POJ 1066 线段相交判断
- POJ 1127 Jack Straws (线段不规范相交&&图的连通性&&Floyd-Warshall算法)
- poj 1127 Jack Straws 并查集+线段规范相交的判断
- 判断两条线段相交的实验
- 判断两线段相交的模板
- 两条线段相交的各种情况
- 两线段相交的判别方法
- POJ 2653 Pick-up sticks(线段规范相交)
- POJ 2653 Pick-up sticks(线段规范相交)
- 算法实验题8.1 黑箱子问题
- 没有applicationi.mk使用ndk-build
- Cocos2d-x 3.0 开发(十二)在CocoStudio中使用粒子挂载与曲线动画
- 第14周项目3-利用数组输出要求的元素值
- bootenv
- POJ 1066 两线段的规范相交
- JAVA定时器
- ip修改第二位出错
- android有名的BLOG
- 递归实现猴子分桃 java实现
- 操作系统原理内存管理
- lms_nfs
- topcoder SRM 548 DIV2 250
- micro2440 裸板程序调试记录一