題意:
經典的圖的染色問題,求對於給定的無向圖中,給每個結點染兩種不同顏色(黑色和白色)的一種且相鄰結點的顏色不同,求染成黑色的最多結點數。
分析:這個題求的圖的最大獨立集,最大獨立集即為黑色節點的個數。
由於原圖的最大獨立集=補圖的最大團。
而這個題是普通圖,所以用回溯法來做,時間複雜度o(n*2^n)
**:view code
1 #include 2 #include 3 #include 4using
namespace
std;56
const
int maxnum=101;7
bool
array[maxnum][maxnum];
8bool use[maxnum]; //
進入團的標號
9bool
bestx[maxnum];
10int
cn,bestn,p,e;
1112
void dfs(int
i)13
2930 flag=true;31
for(j=1;j)
32if(use[j]&&!array[j][i])
3337
if(flag)
3844
if(cn+p-i>bestn) //
剪枝4549}
5051
intmain()
5267
68 cn=bestn=0
;69 dfs(1
);70 printf("
%d\n
",bestn);
71for (i=1; i<=p; i++)
72if
(bestx[i])
73 printf("
%d "
,i);
74 printf("\n"
);75}76
77return0;
78}7980
/*81182
5 783
1 284
1 485
1 586
2 387
2 588
3 589
4 590
*/
poj 1419 最大獨立集
題目大意 乙個無向圖中,使用黑白兩種顏色對頂點著色,要求相鄰頂點不能同時為黑色,求最大能染黑色頂點數量以及對應頂點。解題思路 相鄰頂點間有邊相連,模型轉換成求 無向圖 最大獨立集。因為是np問題,目前沒有有效演算法。又 最大團頂點數量 補圖的最大獨立集 所以我們可以用 優化的 bron kerbos...
樹的最大獨立集
include include includeusing namespace std ifstream fin c data19.in struct node int data int c int gc struct node parent struct node left struct node ...
樹的最大獨立集
題意 對於一棵有n個結點的無根樹,選出盡量多的結點,使得任何兩個結點均不相鄰 稱為最大獨立集 sol 樹形dp 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...