POJ 3565 Ants
来源:互联网 发布:30岁的程序员何去何从 编辑:程序博客网 时间:2024/04/29 02:13
这道题有两种方法,一种是用图论中的KM算法求,因为二分图的最小权匹配一定满足两两线段不相交
另一种方法就是用计算几何中的调整思想,不断修改直到满足条件为止
#include<stdio.h>#include<algorithm>#include<math.h>using namespace std;const double eps=1e-8;int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;}struct Point { double x,y; Point(){}Point(double _x,double _y){x = _x;y = _y;} Point operator -(const Point &b)const{return Point(x - b.x,y - b.y);} double operator ^(const Point &b)const{return x*b.y - y*b.x;}};struct Line{ Point s,e; Line(){} Line(Point ss,Point ee){s=ss;e=ee;};};Point ant[105],tree[105];int match[105];bool inter(Line l1,Line l2){returnmax(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) &&max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) &&max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) &&max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) &&sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e)) <= 0 &&sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e)) <= 0;}int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif // ONLINE_JUDGE int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++) scanf("%lf%lf",&ant[i].x,&ant[i].y); for(int i=0;i<n;i++) scanf("%lf%lf",&tree[i].x,&tree[i].y); for(int i=0;i<n;i++) match[i]=i; while(1){ int ok=1; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if (i==j) continue; if (inter(Line(ant[i],tree[match[i]]),Line(ant[j],tree[match[j]]))) { swap(match[i],match[j]); ok=0; } } } if (ok) break; } for(int i=0;i<n;i++) printf("%d\n",match[i]+1); }}
0 0
- POJ 3565 Ants
- poj 3565 Ants KM
- POJ 3565 Ants
- POJ 3565 - Ants
- POJ 3565 Ants
- poj 3565——Ants
- Ants - POJ 3565 KM算法
- POJ 3565 Ants (KM)
- poj 3565 Ants KM算法
- Ants POJ - 3565 (神题)
- POJ Ants
- [POJ]Ants
- POJ Ants
- Ants POJ
- Ants POJ
- POJ 3565 Ants(计算几何,KM)
- poj 3565 Ants(几何调整思想)
- POJ 3565 Ants (证明+KM算法)
- 01背包问题概述及实现(有改动)
- java 字节流和字符流的区别
- Linux安装node.js
- hdu 1285 确定比赛名次 简单的拓扑排序模板题~~需要注意重边
- 辛星浅析kill、pkill的区别
- POJ 3565 Ants
- 例题10-1 巨大的斐波那契数! UVa11582
- POJ 3252 递推关系
- UVA - 11292 Dragon of Loowater
- codeforces 166e Tetrahedron 水dp
- UVA - 11729 Commando War
- uva 11300 - Spreading the Wealth(数论)
- hdu 1021 (找规律题)
- 【ACM打卡】ZOJ 1414 3100