今天學弟問到了…就稍稍寫一下吧,似乎是叫(graham掃瞄法)?
(只會這乙個) 太菜了
其實求凸包很簡單 (為什麼當時就是學不會?被自己菜哭)
首先要找到左下角的點.(它一定是凸包上的點)
以那個點為中心極角排序
然後把排完序的前兩個點入棧
判斷棧中倒數第二個點與最後乙個點和當前判斷的點構成向量的叉乘,如果為負值,退棧,一直退到不為負值或者棧中的元素樹小於2
把正在判斷的點入棧
等到所有點遍歷完了,棧中的元素就是凸包上的點…
**如下:(實在沒有什麼值得多說的…)
#include
#include
#define max 1000
using
namespace std;
struct node
node operator
-(node a)
//向量減
intoperator
*(node a)
//叉乘
friend
intgetdis
(node a, node b)
//兩點間距離的平方
void
show()
}p[max]
;int ans[max]
;int n;
intcmp
(node a, node b)
//極角排序
void
getans()
//求凸包...
for(
int i =
0; i < len; i++
) p[ans[i]].
show()
;int s =0;
for(
int i =
1; i+
1< len; i++
)//求凸多邊形面積(因為我這裡都是整數,就沒用double...正常寫肯定要用double的...)
cout <<
1.0* s /2;
}int
main()
node t = p[m]
; p[m]
= p[0]
; p[0]
= t;
//一定要把最左下的點和最開始的點換位置!!這裡處理不好還會出莫名其妙的bug(不知道為什麼,對sort研究不深...)
sort
(p, p + n, cmp)
;getans()
;return0;
}/*91 0
3 22 0
2 12 2
2 31 1
0 03 3
*/
HDOJ2013,做得這麼費勁我還是太菜了
今天水論壇才看見別人說hdoj要從第十一頁刷起 最近都在準備考試沒有敲 後天計算機導論,慌的一批 problem hdoj2013蟠桃記 problem description 喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知 悟空是在研究乙個數學問題!...
可能是我我太菜雞了吧
西洋棋的棋盤是黑白相間的8 8的方格,棋子放在格仔中間。如下圖所示 王 後 車 象的走子規則如下 王 橫 直 斜都可以走,但每步限走一格。後 橫 直 斜都可以走,每步格數不受限制。車 橫 豎均可以走,不能斜走,格數不限。象 只能斜走,格數不限。寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從...
graham求凸包演算法
問題 點集q的凸包 convex hull 是指乙個最小凸多邊形,滿足q中的點或者在多邊形邊上或者在其內。這個演算法是由數學大師葛立恆graham發明的,他曾經是美國數學學會ams att 首席科學家.see 模板 see include include using namespace std cl...