10 1 叉積 ,極角排序,掃瞄法求凸包

2022-08-19 13:36:12 字數 2777 閱讀 9440

凸包:用乙個凸多邊形將所有點圍起來,這個凸多邊形就是凸包

1.先要引入乙個數學工具,向量叉積

|c|=|a×b|=|a| |b|sinα(α為a,b向量之間的夾角)

則 |c| 為向量a ,b所組成的平行四邊形的面積

這裡是用叉積判斷兩向量的相對位置關係(非常有用!)

則 a x b < 0 (a在b的逆時針方向 ) , b x a > 0(b在a的順時針方向)

//

求叉積struct

node;

}}p[n] ,s[n];

inline

double

x( node a ,node b )

2. graham掃瞄法求凸包

1)找出所有點中在最左下角的點定為極點

//

找左下邊界點

int k = 1

; rep( i ,

2,n )

swap( p[

1] ,p[k] );

2)利用叉積進行極角排序

//

極角比較

bool cmp ( node &a , node &b )

//

極角排序

sort( p+2 ,p+n+1 ,cmp);

3)存凸包

s為存凸包的棧 ,t為棧頂

則由以下關係用叉積取捨s中的點

將凸包存在s中

s[1] = p[1

]; s[

2] = p[2

];

int t = 2

; rep( i ,

3,n )

然後凸包就求出來了

模板題 :

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mem( a ,x ) memset( a , x ,sizeof(a) )

#define rep( i ,x ,y ) for( int i = x ; i<=y ;i++ )

#define lson l ,mid ,pos<<1

#define rson mid+1 ,r ,pos<<1|1

#define fi first

#define se second

using

namespace

std;

typedef

long

long

ll ;

typedef pair

pii;

typedef pair

int>pli;

const ll inf = 0x3f3f3f3f

;const

int n = 1e5+5

;const ll mod = 1e9+7

;int

n ,m;

//求叉積

struct

node;

}}p[n] ,s[n];

inline

double

x( node a ,node b )

inline

double

dis( node a ,node b )

inline

double

mul( node a ,node b ,node c )

//極角比較

bool cmp ( node &a , node &b )

//graham 掃瞄

intgraham( )

swap( p[

1] ,p[k] );

//極角排序

sort( p+2 ,p+n+1

,cmp);

//將凸包存在s中

s[1] = p[1

]; s[

2] = p[2

];

int t = 2

; rep( i ,

3,n )

returnt;}

intmain( )

int sz =graham( );

double ans = dis(s[1

] ,s[sz]);

rep( i ,

1 ,sz-1 )ans += dis( s[i] ,s[i+1

] ) ;

printf(

"%.2f

",ans);

return0;

}

10 1動態規劃例題 數字三角形

10.1 什麼是動態規劃 前面學過了用遞迴的方法解決問題。但是,單純的遞迴,在解決某些問題的時候,效率 會很低。例如下面這道題目 例題 數字三角形 問題描述 73 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路 徑,把...

101 二叉樹 對稱二叉樹

方法一 遞迴 對於此題 遞迴的點怎麼找?從拿到題的第一時間開始,思路如下 怎麼判斷一棵樹是不是對稱二叉樹?答案 如果所給根節點,為空,那麼是對稱。如果不為空的話,當他的左子樹與右子樹對稱時,他對稱。那麼怎麼知道左子樹與右子樹對不對稱呢?在這我直接叫為左樹和右樹。答案 如果左樹的左孩子與右樹的右孩子對...

101 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。思路 遞迴就用dfs,迭代是b...