1. 程式人生 > >關於二分圖染色的幾點總結

關於二分圖染色的幾點總結

二分圖染色的概念:

  • 二分圖染色是一種用來判斷給定圖(有向圖或無向圖)是否是二分圖的演算法。
  • 在圖上不斷進行BFS或DFS,並在執行過程中不斷對結點進行"染色","染色"保證相鄰結點的顏色必然不同。如果無法保證,則這個圖就是二分圖.

二分圖染色時的注意事項:

  • 二分圖染色的題常會結合DP進行考察,因此往往要注意推理狀態轉移方程
  • 二分圖染色型別的題目也有可能結合類似DAG上的推論這種圖上定理進行考察,這就要求對圖論有一定的掌握。特別需要注意非聯通圖的情況.

二分圖染色的例題(難度由低到高):

二分圖染色的適用範圍:

  • 只要是圖即可.

判斷一個圖是二分圖的充分條件:

  • 圖上沒有邊數為奇數的環.

關於二分圖染色的總結:

  • 染色性:在演算法的執行的過程中,會不斷對結點進行標記,也就是染色。在二分圖染色演算法中,結點往往只會被染成兩種染色,在這種情況下,我們往往可以使用兩個特定的數字,如:1或0來進行染色(因為可以直接使用^運算子,儲存資料的陣列初始化為-1即可).
  • 遍歷性:在二分圖染色的過程中,會經過圖上的每一個點。在這一點上,她和其他圖上演算法是有著較大的相似性的(如:
    Kruskal
    Dijkstra拓撲排序)。但是,這一條性質也不是一定要滿足的。在上面我們已經知道,判斷一個圖是二分圖的充分條件是圖上沒有邊數為奇數的環,如果以這個條件為判斷依據,可能不需要遍歷所有點(在一般情況下常常使用BFS或DFS演算法遍歷所有點).
  • 簡單性:在二分圖染色的常見實現中,最常見的實現方法往往就是DFS或BFS染色的方法了。也因為她"易於實現"的特性,在實際實踐中,二分圖染色可能是比較容易想到的一部分,但也是比較重要的一部分.
  • 數學性質:由於判斷一個圖是否為二分圖的充分條件中,我們的判斷依據與邊的"數量"有關,因此,在一些情況下,我們應該是可以通過圖上的邊數或邊的特性來推理這個圖是否為二分圖(如:DAG必然為二分圖).
  • 二分性:在遇到一些需要將一些物件分成兩個不同的部分的情況時,可以考慮使用二分圖染色判斷是否為二分圖,就能得到一個與解相關的結論:該問題是否可解.