A Za, A Za, Fighting...

坚信:勤能补拙

PKU 2531 Network Saboteur

问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=2531

思路:
更像是枚举的搜索,外加一个简单的对称性减枝,不过耗时比较久

代码:
 1 #define MAX_NUM 21
 2 int matrix[MAX_NUM][MAX_NUM];
 3 int mark[MAX_NUM], mark_num;
 4 int num, max;
 5 
 6 int
 7 calculate()
 8 {
 9     int i, j;
10     int sum = 0;
11     for(i=0; i<num; i++)
12         if(mark[i]) {
13             for(j=0; j<num; j++)
14                 if(!mark[j])
15                     sum += matrix[i][j];
16         }
17     return sum;
18 }
19 
20 void
21 dfs(int depth)
22 {
23     int rt;
24     if(depth == num) {
25         rt = calculate();
26         max = rt>max ? rt : max;
27         return;
28     }
29     ++mark_num;
30     mark[depth] = 1/* mark[depth]=1, put 'depth' into the category I */
31     if(mark_num <= (num>>1)) /* pruning */
32         dfs(depth+1);
33     --mark_num;
34     mark[depth] = 0;
35     dfs(depth+1); /* put 'depth' into the category II */
36 }

posted on 2010-07-30 16:57 simplyzhao 阅读(233) 评论(0)  编辑 收藏 引用 所属分类: B_搜索


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2011年7月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜