1. 程式人生 > >序列可簡單圖化(Havel定理)

序列可簡單圖化(Havel定理)

判斷數列是否可序列化。給定一個非負整數序列 (d1,d2,...dn) ,若存在一個無向簡單圖使得圖中各點的度與此序列一一對應,則稱此序列可簡單圖化。

輸入:

輸入有兩行

第一行輸入一個整數 N ,代表序列中非負整數的個數。 N <= 3000

第二行 N 個元素以空格隔開,代表這 N 個非負整數所組成的序列。

輸出:

測試結果有一行輸出

yes 代表此序列可簡單圖化

no 代表此序列不可簡單圖化

================================分割線=================================

這不就是havel定理嗎?

havel定理:

可圖化的判定:d1+d2+……dn是偶數(握手定理)

可簡單圖化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,則d可簡單圖化當且僅當
d’={d2-1,d3-1,……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可簡單圖化。簡單的說,把d排序後,
找出度最大的點(設度為d1),把它與度次大的d1個點之間連邊,然後這個點就可以不管了,一直繼續這
個過程,直到建出完整的圖,或出現負度等明顯不合理的情況。

簡單地說就是:

1.從小到大排序

2.最大度數n置為0,其後的n個數均減1

3.如果出現負數或所有度數全為0,則跳出,第一種情況不能簡單圖化,第二種可以。。。如果沒出現以上兩種情況,則回到第一步

具體實現比較簡單,就不再帖程式碼了— 。—