最大團問題 回溯法

2021-09-23 01:47:13 字數 744 閱讀 6632

題目:對於給定的無向圖,找出他的最大團

分析:

圖的乙個完全子圖就是乙個團,所以找最大團,通俗點講就是在乙個無向圖中找出乙個點數最多的完全圖【任意兩點之間均有邊相鄰】

採用回溯法,對於解空間的子集樹,只有當前節點和所有已選的頂點都相連,才進入左子樹

而當 當前結點加上剩下節點數比最優節點的個數多時 才進入右子樹 這樣才有價值

#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...