ZOJ 1002 Fire Net 的答案(回溯法)

       ---------------------------------------------------------------------------------------------------------------------------

       严格来讲,此题并不算我做出来的。因为我在WA后忍不住搜索了这道题的网上资料,并在参考了“洞庭散人”的代码后AC的。  

       ----------------------------------------------------------------------------------------------------------------------------

        ZOJ 1002: Fire Net(碉堡 火力网)

        http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2

        此题大意是在一个最大4*4网格组成的城市里,每个网格可能为“墙壁”(用‘X’表示)和“街道”(用‘.’表示)。现在在街道放置碉堡,每个碉堡可以向上下左右四个方向开火,子弹射程无限远。墙壁可以阻挡子弹。问最多能放置多少个碉堡,使它们彼此不会互相摧毁。

       例如输入:

       .X..
       ....
       XX..
       ....

       则应输出最大个数为5。

       此题和n后问题非常类似,因此可用回溯法搜索整个解空间树。最开始我使用了“贪心法”但是WA,原因就在于贪心法的特点是:得到的解不一定是整体最优解。因此还是得用回溯法搜索整个空间树。和n后问题解法一样,CanPut是判别函数,判断位置(x,y)是否能放置碉堡。

       以下是我写的代码,但大体上都参考了洞庭散人的文章(代码在本质上完全一致):

       http://www.cnblogs.com/phinecos/archive/2008/09/18/1293017.html

Code_1002_Fire_Net


 

原文地址:https://www.cnblogs.com/hoodlum1980/p/1318407.html