簡單圖+Havel_Hakimi定理

1.什麼是簡單圖:

沒有平行邊和自環


什麼是平行邊?對於無向圖,如果兩個點之間有一條以上的邊,則這些邊是平行邊;

 對於有向圖,如果一個點指向另一個點的邊多於一條,則這些邊是平行邊


什麼是自環?邊的兩個端點是同一個點


2.度序列

一個由圖的各個點的度數組成的序列


3.Havel_Hakimi定理:用於判斷一個度序列能否轉換成一個簡單圖

流程:度序列按降序排列

           初始i=0,除去第i個點d[i],i+d[i]的每個點度數一次減1

           i++,重複上述步驟


如果當前度數最大的點的度數大於總的點數,則不能組成圖

如果-1後,有的點的度數出現負數,則不能組成圖

執行完循環後,如果最後一個點的度數不爲0,則不能組成圖


核心代碼如下:

bool Havel_Hakimi(){  
    for(int i=0; i<n-1; ++i){  
        sort(arr+i,arr+n,greater<int>());  
        if(i+arr[i] >= n) return false;  
        for(int j=i+1; j<=i+arr[i] ; ++j){  
            --arr[j];  
            if(arr[j] < 0) return false;  
        }  
    }  
    if(arr[n-1]!=0) return false;  
    return true;  
}  


參考博客:Havel_Hakimi


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章