Network Saboteur(dfs)

http://poj.org/problem?id=2531

不太理解这个代码。。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int map[32][32],v[32];
 4 int n,max;
 5 void dfs(int row,int sum)
 6 {
 7 
 8     int ans = sum;
 9     v[row] = 1;
10     for (int i = 1; i <= n; i ++)
11     {
12         if (v[i]==0)
13             ans += map[row][i];
14         else
15             ans -= map[row][i];
16     }
17     if (ans > max)
18         max = ans;
19     for (int i = row+1; i <= n; i ++)
20     {
21         if (ans > sum)
22         {
23             dfs(i,ans);
24             v[i] = 0;
25         }
26     }
27 }
28 int main()
29 {
30     scanf("%d",&n);
31     max = 0;
32     memset(v,0,sizeof(v));
33     for (int i = 1; i <= n; i ++)
34     {
35         for (int j = 1; j <= n; j ++)
36         {
37             scanf("%d",&map[i][j]);
38         }
39     }
40     dfs(1,0);
41     printf("%d\n",max);
42     return 0;
43 
44 }
View Code

 

posted @ 2013-08-30 11:39  N_ll  阅读(203)  评论(0编辑  收藏  举报