http://poj.org/problem?id=2531
把第i个节点 放在A集合中 加上没有放在A集合中的节点与之相连的数值 减去已经放在A节点中与之相连的数值
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int num[25][25],n,va[50],vb[50],ma,sum; 6 void dfs(int x,int sum) 7 { 8 int i; 9 va[x] = 1; 10 for(i = 1 ; i <= n ; i++) 11 { 12 13 if(!va[i]&&i!=x) 14 sum+=num[x][i]; 15 else 16 sum-=num[x][i]; 17 18 } 19 if(sum>ma) 20 ma = sum; 21 for(i = x+1; i <= n ; i++) 22 { 23 dfs(i,sum); 24 va[i] = 0; 25 } 26 } 27 int main() 28 { 29 int i,j; 30 while(cin>>n) 31 { 32 memset(va,0,sizeof(va)); 33 for(i = 1; i <= n ; i++) 34 for(j = 1; j <= n ; j++) 35 cin>>num[i][j]; 36 ma = 0; 37 dfs(1,0); 38 cout<<ma<<endl; 39 } 40 return 0; 41 }