首页 新闻 会员 周边 捐助

一道百度的编程题

0
悬赏园豆:10 [待解决问题]

社区里有一些房屋,社区居民想要避免不必要的打扰,于是决定用围栏围起他们的社区,使其完全隔离,围栏将从一座房屋连接到另一座房屋,形成封闭的边界,社区主任想要确定能从社区所有的房屋都处于围栏区域内的所要连接的房屋最低数量。

请写出一个算法,得出需要用围栏连接的最少房屋数,以确保所有房屋都处于围栏区域内。

 

输入:

房屋数 n

n行,每行两个数:X Y

(房屋的x,y坐标)

输出:

最小连接房屋数

luoyin500的主页 luoyin500 | 初学一级 | 园豆:89
提问于:2018-04-07 22:59
< >
分享
所有回答(2)
0

应该是典型的凸包算法。这类题目都有典型的模板可以用的。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-04-08 11:27

又见大神,凸包算法,嗯,学习了。

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-04-08 11:35

学习了,大神

支持(0) 反对(0) luoyin500 | 园豆:89 (初学一级) | 2018-04-08 15:01
0

怎么又是你...你确定你不是HR跑这招人来了?

好吧,我来抛砖引玉一下,我图形学学的不好,这是我随便脑洞了一下的算法...呃...不...是方法。

假设所有的坐标都是正数,如果出现负数,平移原点。

首先X,Y坐标最小(离原点最近)的点为起点p[0],设一向量,平行于y=-x。

然后计算此点到其他左右点的向量 与 初始向量的夹角,取最大的且小于180°的那个点,为第二个点p[1]。

以此类推,计算p[n]到所有点的向量 与 p[n-1]到p[n]向量的夹角,取角度最大且小于180°的点,循环这一过程直到回到P[0]

取出的点就是连线的点。

中午吃饭回来,我试试扣腚一下

 

随意脑洞结果,肯定有不科学的地方,欢迎大神指教。权当娱乐,不喜勿喷

写代码的相声演员 | 园豆:517 (小虾三级) | 2018-04-08 11:33

就是凸包算法:Graham扫描法


支持(0) 反对(0) Shendu.CC | 园豆:2138 (老鸟四级) | 2018-04-08 11:37

@Shendu.cc: 我去...我竟然还脑洞对了...(手动惊恐)

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2018-04-08 12:57

诶,一枚做笔试的水博。

支持(0) 反对(0) luoyin500 | 园豆:89 (初学一级) | 2018-04-08 15:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册