題目:對於給定的無向圖,找出他的最大團
分析:
圖的乙個完全子圖就是乙個團,所以找最大團,通俗點講就是在乙個無向圖中找出乙個點數最多的完全圖【任意兩點之間均有邊相鄰】
採用回溯法,對於解空間的子集樹,只有當前節點和所有已選的頂點都相連,才進入左子樹
而當 當前結點加上剩下節點數比最優節點的個數多時 才進入右子樹 這樣才有價值
#include#include#includeusing namespace std;
#define n 6
int n=5;
int cn=0;//當前結點的個數
int cx[n];//記錄當前結點的陣列
int bn=0;//記錄最優結點的個數
int bestx[n];//記錄最優結點的陣列
//圖的鄰接矩陣
int g[n][n]=;
void dfs(int i)
} int flag=1;
for(int j=1;jbn)
} int main(){
memset(cx,0,sizeof(cx));//初始化當前的記錄陣列
dfs(3);//任意一點搜尋
cout<<"乙個最大團包含的節點為:";
for(int i=1;i<=n;i++){
if(bestx[i]==1){
cout《該演算法的缺點在於:一次只能求出乙個最大團
回溯法 最大團問題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 層...
演算法分析 回溯法 最大團問題
在若干點和若干連線中,找到完全子圖,即子圖中各個點都和其他點相連 有4部分 1.定義全域性變數 2.約束函式 限制生成左子樹的函式 3.遞迴函式 4.呼叫遞迴函式的函式,也可以直接寫在main 1.定義全域性變數 const int m1 5 元素數 vector vector a1 int cn1...