Bron–Kerbosch算法


BK算法使用搜索+剪枝來尋找無向圖最大團。

一些定義

  1. :完全子圖。
  2. 最大團:點數最大的團。
  3. 最大獨立集 :最大的點集使得點集中任意兩點都沒有邊直接相連。

(以上摘自OI wiki)

算法流程

先定義一些數組和變量(有的是\(dfs\)里的變量):

  • \(cnt[i]\)表示從\(i-n\)這些點的最大團點數
  • \(vis[i]\)存當前搜到的團
  • \(now\)表示現在正在搜團內第\(now\)個點(注意現在團內只有\(now-1\)個點)
  • \(x\)表示當前搜到的點
  • \(ans\)表示當前答案

首先我們肯定要按照一定的順序搜索(這里我們標號從大到小搜),然后我們用正常思路爆搜,當然我們需要加一些剪枝:

  1. \(now-1+cnt[i] \leq ans\)時直接退出(最優性剪枝)
  2. 只有當前點和當前的團還能組成最大團時才繼續遞歸(可行性剪枝)

(感覺光從文字非常難以理解,還是建議看代碼理解)

例題:

  1. poj 1419 Graph Coloring 題解(代碼可以在這里看)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM