A Za, A Za, Fighting...

坚信:勤能补拙

PKU 1321 棋盘问题

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

思路:
深度优先搜索
有点类似于八皇后问题,不过要注意这里k<=n,也就是说: 某些行是可以不放置棋子的

不过,该题还可以利用位运算进行优化...

代码:
 1 char chessboard[MAX_LEN][MAX_LEN];
 2 int record[MAX_LEN];
 3 int n, k;
 4 int total;
 5 
 6 int
 7 is_valid(int i, int depth)
 8 {
 9     int j;
10     for(j=0; j<depth; j++)
11         if(record[j] == i)
12             return 0;
13     return 1;
14 }
15 
16 void
17 dfs(int depth, int cur)
18 {
19     int i, j;
20     if(depth == n) {
21         if(cur == k)
22             ++total;
23         return;
24     }
25     if(cur+(n-depth) < k) /* pruning */
26         return;
27     for(i=0; i<n; i++) {
28         if(chessboard[depth][i]=='#' && is_valid(i, depth)) {
29             record[depth] = i;
30             dfs(depth+1, cur+1);
31             record[depth] = -1;
32         }
33     }
34     dfs(depth+1, cur);
35 }

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


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


导航

<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜