最大團,極大團

2022-08-19 14:06:10 字數 2069 閱讀 5056

對於給定圖g=(v,e)。其中,v=是圖g的頂點集,e是圖g的邊集。圖g的團就是乙個兩兩之間有邊的頂點集合。簡單地說,團是g的乙個完全子圖。如果乙個團不被其他任一團所包含,即它不是其他任一團的真子集,則稱該團為圖g的極大團(maximal clique)。頂點最多的極大團,稱之為圖g的最大團(maximum clique)。最大團問題的目標就是要找到給定圖的最大團。

一、最大團

給定無向圖g=(v,e),其中v是非空集合,稱為頂點集;e是v中元素構成的無序二元組的集合,稱為邊集,無向圖中的邊均是頂點的無序對,無序對常用圓括號「( )」表示。如果u

v,且對任意兩個頂點u,v∈u有(u,v)∈e,則稱u是g的完全子圖。g的完全子圖u是g的團。g的最大團是指g的最大完全子圖。

如果uív且對任意u,v∈u有(u,v)不屬於e,則稱u是g的空子圖。g的空子圖u是g的獨立集當且僅當u不包含在g的更大的空子圖中。g的最大獨立集是g中所含頂點數最多的獨立集。

對於任一無向圖g=(v,e),其補圖g'=(v',e')定義為:v'=v,且(u,v)∈e'當且僅當(u,v)∉e。

如果u是g的完全子圖,則它也是g'的空子圖,反之亦然。因此,g的團與g'的獨立集之間存在一一對應的關係。特殊地,u是g的最大團當且僅當u是g'的最大獨立集。

通俗點講就是在乙個無向圖中找出乙個點數最多的完全圖。

二、回溯法求最大團問題

回溯法搜尋解空間樹時,根節點首先成為乙個活結點,同時也成為當前的擴充套件節點。在當前擴充套件節點處,搜尋向縱深方向移至乙個新節點。這個新節點就成為乙個新的活結點,並成為當前擴充套件節點。如果當前擴充套件節點不能再向縱深方向移動,則當前的擴充套件節點就成為死結點。此時,往回回溯至最近的乙個活節點處,並使這個活結點成為當前的擴充套件節點。

回溯法以這種方式遞迴地在解空間中搜尋,直至找到所有要求的解或解空間已無活結點為止。

搜尋:

回溯法從根結點出發,按深度優先策略遍歷解空間樹,搜尋滿足約束條件的解。

剪枝:

一般來講,回溯法求解問題的基本步驟如下:

(1)針對所給問題,定義問題的解空間;確定易於搜尋的解空間結構;以深度優先方式搜尋解空間,並在搜尋過程中利用pruning函式剪去無效的搜尋。

(2)無向圖g的最大團問題可以看作是圖g的頂點集v的子集選取問題。因此可以用子集樹表示問題的解空間。設當前擴充套件節點z位於解空間樹的第i層。在進入左子樹前,必須確認從頂點i到已入選的頂點集中每乙個頂點都有邊相連。在進入右子樹之前,必須確認還有足夠多的可選擇頂點使得演算法有可能在右子樹中找到更大的團。 

(3)用鄰接矩陣表示圖g,n為g的頂點數,cn儲存當前團的頂點數,bestn儲存最大團的頂點數。cn+n-i為進入右子樹的上界函式,當cn+n-i

三、例題

1.hdoj1530 maximum clique

題意:給定n個點的無向圖,讓你求最大團。(最大團**模板)

1 #include2 #include3 #include4

#define maxn 55

5using

namespace

std;

6int

a[maxn][maxn],v[maxn];

7int cn,bestn; //

當前節點數,最大節點數

8intn;9

int check(int

x)13

return1;

14}15void dfs(int

x)20

if(check(x))

26if (cn+n-x>bestn)30}

31int

main()

38 cn=bestn=0

;39 memset(v,0,sizeof

(v));

40 dfs(1

);41 cout << bestn <

43return0;

44 }

組隊(最大團)

問題描述 小秋秋想出去玩了。小秋秋有許多朋友,有一些小秋秋的朋友相互之間也是朋友。小秋秋覺得自己帶不是朋友的兩個朋友出去玩會出現尷尬。好糾結 小秋秋想知道自己最多可以帶多少朋友出去玩以及帶人最多的方案數。輸入檔案 input.txt 第一行兩個數,n,m分別表示小秋秋的朋友數,以及他們之間相互認識的...

最大團問題

include cstdio include queue include cstring define max 20 using namespace std int n 城市數量 int x max 解向量 struct node priority queuepq void enqueue int ...

最大團問題

最大團問題 首先介紹一些基本概念 1 什麼是團?如果乙個子圖是乙個無向圖的完全子圖,那麼可以稱為乙個團。2 什麼是極大團?如果乙個團不是任何乙個團的子集,那麼可以稱做乙個極大團。3 如果乙個極大團的大小是最大的,那麼可以被稱為乙個最大團。最大團有以下常見性質,這裡不加證明的直接給出結論。最大團點的數...