address:
題目中文題目,很容易懂。有一點比較關鍵。
輸出各個籬笆經過各個供水裝置的座標點, 從這句話可以得到,如果3點共線,那麼這3個點都要輸出。
在叉積函式中 return (sp.x-op.x)*(ep.y-op.y)>(sp.y-op.y)*(ep.x-op.x); 即可解決。
凸包 中的叉積 return (sp.x-op.x)*(ep.y-op.y)>=(sp.y-op.y)*(ep.x-op.x); 在一條直線上的點取兩頭的,中間的不要。
就這點注意下,這道題就很簡單了。直接套用凸包即可解決。
#include#include#includeusing namespace std;
struct point
pnt[105],res[105];
bool cmp(const point &p1,const point &p2)
int graham(point pnt,int n,point res)
return top;
}int main()
{ int n,m;
cin>>n;
while(n--)
{ cin>>m;
int i,j;
for(i=0;i>pnt[i].x>>pnt[i].y;
j=graham(pnt,m,res);
sort(res,res+j,cmp);
for(i=0;i
NYOJ 78 圈水池 (凸包問題)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入 第一行...
NYOJ 78 圈水池(凸包基礎)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入第一行輸...
NYOJ 78 圈水池(簡單凸包)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有乙個牧場,牧場上有很多個供水裝置,現在牧場的主人想要用籬笆把這些供水裝置圈起來,以防止不是自己的牲畜來喝水,各個水池都標有各自的座標,現在要你寫乙個程式利用最短的籬笆將這些供水裝置圈起來!籬笆足夠多,並且長度可變 輸入第一行輸...