uva11343 Isolated Segments
2016-05-16 20:34
204 查看
题意:给了很多线段,点的坐标都是整数,并且绝对值 <1000,如果某一条线段和其他任何一条线段都不想交,就是被隔离的,求出被隔离线段的个数
分析:
这还是一道简单的叉积题
分析:
这还是一道简单的叉积题
/* 线段相交 */ #include <iostream> #include <cstdio> #include <cstdlib> #include <vector> //#define T #define def 1e-6 using namespace std; //点 struct Point { double x; double y; }; //判断点在pi-pj在线段的那一侧 int direction(Point* pi,Point* pj,Point* pk) { Point p1,p2; p1.x = pk->x - pi->x; p1.y = pk->y - pi->y; p2.x = pj->x - pi->x; p2.y = pj->y - pi->y; double cross = p1.x*p2.y - p2.x*p1.y; if(cross >= def) return 1; else if(cross <= -def) return -1; else return 0; } //判断点是否在pi和pj为对角点的矩形里 bool onSegment(Point* pi,Point* pj,Point* pk) { double minx,miny,maxx,maxy; if(pi->x > pj->x) { minx = pj->x; maxx = pi->x; } else { minx = pi->x; maxx = pj->x; } if(pi->y > pj->y) { miny = pj->y; maxy = pi->y; } else { miny = pi->y; maxy = pj->y; } return (minx <= pk->x)&&(maxx >= pk->x)&&(miny <=pk->y)&&(maxy >= pk->y); } //判断线段相交 bool segmentIntersect(Point* p1,Point* p2,Point* p3,Point* p4) { int d1 = direction(p3,p4,p1); int d2 = direction(p3,p4,p2); int d3 = direction(p1,p2,p3); int d4 = direction(p1,p2,p4); if(d1*d2 < 0&&d3*d4 < 0) return true; if(!d1 && onSegment(p3,p4,p1)) return true; if(!d2 && onSegment(p3,p4,p2)) return true; if(!d3 && onSegment(p1,p2,p3)) return true; if(!d4 && onSegment(p1,p2,p4)) return true; return false; } vector<Point> Li,Lj; vector<bool> flag; int main() { #ifdef T freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif // T int n,m,count_num,i,j; scanf("%d",&n); while(n--) { scanf("%d",&m); Li.resize(m); Lj.resize(m); flag.resize(m+1); count_num = 0; for(i = 0; i < m; i++) { scanf("%lf %lf %lf %lf",&Li[i].x,&Li[i].y,&Lj[i].x,&Lj[i].y); flag[i] = false; } for(i=0; i<m; i++) { for(j = 0; j<m; j++) { if(i != j) if(segmentIntersect(&Li[i],&Lj[i],&Li[j],&Lj[j])) { // printf("i = %d j = %d\n",i,j); flag[i] = true; // flag[m] = false; //break; } } } for(i=0; i<m; i++) { if(!flag[i]) count_num++; } printf("%d\n",count_num); } return 0; }
相关文章推荐
- 从Unity引擎过度到Unreal4引擎
- MFC笔记-小实例-分割窗口-源代码
- easyUi--Uploadify文件上传
- Java中equals和==的区别
- 计算几何
- Solr之fieldtype
- 查验身份证(水)
- poj2431 优先队列
- Android面试题集合
- Protobuf的自动打包
- 网络攻防平台第七关
- Java出现No enclosing instance of type E is accessible
- 最长对称子串(KMP)
- events.js:72 throw er; // Unhandled 'error' event
- mysql etl过程 p_social_scan
- 【GDOI 2016 Day1】第二题 最长公共子串
- Ajax通用代码封装
- 利用a标签自动解析URL
- bzoj3531 [Sdoi2014]旅行 树链剖分+动态开线段树
- 计算机组成原理---为什么计算机中要使用补码?