問題:乙個無向圖 g=(v,e),v 是點集,e 是邊集。取 v 的乙個子集 u,若對於 u 中任意兩個點 u 和 v,有邊 (u,v)∈e,那麼稱 u 是 g 的乙個完全子圖。 u 是乙個團當且僅當 u 不被包含在乙個更大的完全子圖中。
g的最大團指包含頂點數最多的乙個團。
#include
using
namespace std;
#define m 101
bool a[m]
[m];
//圖的鄰接矩陣
bool x[m]
;//當前 解
int cn;
//當前團的頂點數
int bestn, bestx[m]
;//當前的最優解
int n, m;
//n圖g的頂點數
void
backtrack
(int i)
}bool ok=
true
;for
(j=1
; jif(ok)
//進入左子樹,選該頂點
if(cn+n-i>bestn)
//剪枝,右子樹,如果代價函式<=bestn,就不用再搜尋
}main()
cn=bestn=0;
backtrack(1
);cout<<
"頂點數:"
<"最大團為:"
;for
(i=1
;i <= n;i++)}
return0;
}
執行結果:
輸入頂點數和邊的個數:process exited after 3.279 seconds with return value 05 81 2
1 31 4
1 52 4
3 43 5
4 5頂點數:4
最大團為:1,3,4,5,
請按任意鍵繼續.
最大團問題 回溯法
題目 對於給定的無向圖,找出他的最大團 分析 圖的乙個完全子圖就是乙個團,所以找最大團,通俗點講就是在乙個無向圖中找出乙個點數最多的完全圖 任意兩點之間均有邊相鄰 採用回溯法,對於解空間的子集樹,只有當前節點和所有已選的頂點都相連,才進入左子樹 而當 當前結點加上剩下節點數比最優節點的個數多時 才進...
回溯法 最大團問題c
本文參考 1 問題描述 給定無向圖g v,e v是頂點集,e是邊集。如果u v,且對任意u,v u有 u,v e,u,v是兩個頂點的符號,則稱u是g的完全子圖。g的完全子圖u是g的乙個團當且僅當u不包含在g的更大的完全子圖中。注 最大團定義 從無向圖的頂點集中選出k個並且k個頂點之間任意兩點之間都相...
回溯法之最大團問題
給定無向圖 g v,e 如果 u subseteq v 且對任意 u,v in u 有 u,v in e 則稱 u 是 g 的完全子圖。完全子圖 u 是 g 的團 iff 不包含在比 g 更大的完全子圖中。g 的最大團是指在 g 中所含頂點數最多的團。設當前擴充套件節點 z 位於解空間樹的第 i 層...