異色三角剖分校驗 內角排序

2021-10-09 10:42:46 字數 1193 閱讀 8078

(可以在弊校oj提交)

輸入乙個可能錯誤的三角剖分(n階凸多邊形,內部n - 3條對角線)。

每條邊的邊權是三種顏色之一。

校驗1:這是乙個正確的三角剖分

校驗2:這個三角剖分的每個單元三角形都是異色三角形。

如果三角剖分正確,內部每個單元三角形的內角,都對應一條邊。

(反過來,一條對角線對應兩個內角,一條輪廓邊對應乙個內角)

如果存在連線出錯了,必定會產生內部多邊形不是三角形的情況。這樣內角對應的邊會找不到。

如果每個三角形都是異色三角形,那麼每個內角的兩個夾角邊異色。

所以只要列舉內角,檢查每個內角,對邊是否存在,夾角邊是否異色。

把這個幾何圖形建成無向圖圖論模型,我們希望每個點的鄰接表中的編號都是順時針或者逆時針的,那麼每次列舉鄰邊就代表這個圖形中的內角。

考慮在鄰接表排序的時候,把當前編號作為最小值,重新對映所有編號(取模)。這樣排序以後就可以自然地從n - 1 列舉下乙個是 0 1 2

以下是逆時針的排序做法:

不理解lambda,可以寫個比較函式,把i作為全域性變數傳遞。

for

(int i =

0; i < n;

++i));

}

const

int maxn =

2e5+59;

using pii = pair<

int,

int>

;int n;

char s[maxn]

;vector g[maxn]

;set has;

void

solve

(int kaseid =-1

)for

(int i =

0; i < n;

++i)

for(

int i =

0; i < n;

++i));

}for

(int u =

0; check1 && u < n;

++u))==

0&&has.

count

(pii)==

0)if(ci == cj)}}

if(!check1)

elseif(

!check2)

else

}

Delaunay(德勞內)三角剖分演算法

在數學和計算幾何領域,平面上的點集p的德勞內三角化是一種三角剖分dt p 使得在p中沒有點嚴格處於 dt p 中任意乙個三角形外接圓的內部。delaunay 三角化最大化了此三角剖分中三角形的最小角,換句話,此演算法盡量避免出現 極瘦 的三角形。此演算法命名 於鮑里斯 德勞內,以紀念他自1934年在...

三角剖分詳解

三角剖分定義 定義 三角剖分 假設v是二維實數域上的有限點集,邊e是由點集中的點作為端點構成的封閉線段,e為e的集合。那麼該點集v的乙個三角剖分t v,e 是乙個平面圖g,該平面圖滿足條件 1.除了端點,平面圖中的邊不包含點集中的任何點。2.沒有相交邊。3.平面圖中所有的面都是三角面,且所有三角面的...

優美三角剖分

優美三角剖分 pas c cpp 題目描述 小x同學為了搞好和小c同學的關係,特意尋找了一些優美的影象作為禮物。這是一些由無窮無盡三角形組成的極為優美的圖形,小x同學很想實現這些極富美感的圖形,但是作為一名初賽都未過的偽退役選手,他水平有限,於是這個艱鉅的任務就落在你們身上了。由於好心的出題人,資料...