中级农民
- 积分
- 110
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-2-22
- 最后登录
- 1970-1-1
|
hi,那个题目就是你有很多边
边可以写成x y坐标表示的class, 一个边可以又两点表示
class line {
int x1, x2;
int y1, y2;
}
然后一个多边形就好多好多边,比如可以写成这样
class shape{
vector<line*> lines;
}
然后给你比如这样的图形,左边一个平行四边形 abfd,右边一个三角形 fce ,要返回组成的最大的多边形的边 which is a b c d e
b
------- / \ c
a / f/ \
------ --------
d e
然后 f 这个边 很有意思,在内存里面是重复的,在平行四边形有一个比如叫f1,在三角形有一个比如叫f2
这题天竺大哥说是一定是点点相连,不会有分离的四边形,所以只要看一遍所有边,然后把重复的边去了就行。但是因为f是分成俩出现的,所以不能看line pointer是否一样,方法是
用string 表示每一个line,f1 = "x1 y1 x2 y2",然后放在哈希表里面,如果出现一样的线,那么x1 x2 y1 y2一定一样。
但是就算是一样的line,可能f1是 x1 y1 x2 y2, f2是x2 y2 x1 y1,所以我每次要看俩点颠倒是否也一样。
遍历一下,查一下哈希表,然后就可以了 |
|