poj2531Network Saboteur

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 }

 

posted @ 2013-01-26 15:27  _雨  阅读(211)  评论(0编辑  收藏  举报