首页 > Web开发 > 详细

DFS ZOJ 1002/HDOJ 1045 Fire Net

时间:2015-04-21 17:44:58      阅读:338      评论:0      收藏:0      [点我收藏+]

 

题目传送门

 1 /*
 2     题意:在一个矩阵里放炮台,满足行列最多只有一个炮台,除非有墙(X)相隔,问最多能放多少个炮台
 3     搜索(DFS):数据小,4 * 4可以用DFS,从(0,0)开始出发,往(n-1,n-1)左下角走,x = cnt / n; y = cnt % n;    更新坐标,
 4     直到所有点走完为止,因为从左边走到右边,只要判断当前点左上方是否满足条件就可以了
 5     注意:当前点不能放炮台的情况也要考虑
 6     g[x][y] == ‘o‘;    的错误半天才检查出来:)
 7 */
 8 #include <cstdio>
 9 #include <iostream>
10 #include <cstring>
11 #include <string>
12 #include <algorithm>
13 #include <map>
14 #include <cmath>
15 using namespace std;
16 
17 const int MAXN = 1e4 + 10;
18 const int INF = 0x3f3f3f3f;
19 char g[5][5];
20 int ans;
21 int n;
22 
23 bool ok(int x, int y)
24 {
25     for (int i=y-1; i>=0; --i)
26     {
27         if (g[x][i] == o)    return false;
28         else if (g[x][i] == X)    break;
29     }
30     for (int i=x-1; i>=0; --i)
31     {
32         if (g[i][y] == o)    return false;
33         else if (g[i][y] == X)    break;
34     }
35 
36     return true;
37 }
38 
39 void DFS(int cnt, int tot)
40 {
41     if (cnt == n * n)
42     {
43         if (ans < tot)    ans = tot;
44         return ;
45     }
46 
47     else
48     {
49         int x = cnt / n;
50         int y = cnt % n;
51 
52         if (g[x][y] == . && ok (x, y) == true)
53         {
54             g[x][y] = o;
55             DFS (cnt+1, tot+1);
56             g[x][y] = .;
57         }
58 
59         DFS (cnt+1, tot);
60     }
61 }
62 
63 int main(void)        //ZOJ 1002/HDOJ 1045 Fire Net
64 {
65     //freopen ("ZOJ_1002.in", "r", stdin);
66 
67     while (scanf ("%d", &n) == 1 && n)
68     {
69         for (int i=0; i<n; ++i)
70             scanf ("%s", &g[i]);
71 
72         ans = -1;    DFS (0, 0);
73 
74         printf ("%d\n", ans);
75     }
76 
77     return 0;
78 }
79 
80 /*
81 5
82 1
83 5
84 2
85 4
86 */

 

DFS ZOJ 1002/HDOJ 1045 Fire Net

原文:http://www.cnblogs.com/Running-Time/p/4444744.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!