序列可簡單圖化(Havel定理)
阿新 • • 發佈:2019-01-31
判斷數列是否可序列化。給定一個非負整數序列 (d1,d2,...dn) ,若存在一個無向簡單圖使得圖中各點的度與此序列一一對應,則稱此序列可簡單圖化。
輸入:
輸入有兩行
第一行輸入一個整數 N ,代表序列中非負整數的個數。 N <= 3000
第二行 N 個元素以空格隔開,代表這 N 個非負整數所組成的序列。
輸出:
測試結果有一行輸出
yes 代表此序列可簡單圖化
輸入:
輸入有兩行
第一行輸入一個整數 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,則跳出,第一種情況不能簡單圖化,第二種可以。。。如果沒出現以上兩種情況,則回到第一步
具體實現比較簡單,就不再帖程式碼了— 。—