题意:一些机枪彼此不能在同一行和同一列,但是由于有墙的阻隔,能保证子弹无法穿透,即可以同行同列,现问如果说给了一个n*n(n<=4)的矩阵,并给出了墙的分布情况,能否求出最大能繁殖的机枪数。

思路:之前按八皇后的思想一行一行搜,不理想,之后改成一个格一个格的搜,回溯要理解好就没问题。

#include <iostream>
#include <cstdio>
using namespace std;
int n,best;
][];
int canput(int row,int col)
{
  int i;
  ;i>=;i--)  //如果(row,col)左面的先是遇到墙,则可行
  {
     if(map[i][col]=='X')
     {
         break;
     }
     if(map[i][col]=='Y')//如果(row,col)左面的先是遇到机枪,则跪
     {
         ;
     }
  }
  ;i>=;i--) //如果(row,col)上面的先是遇到墙,则可行
  {
     if(map[row][i]=='X')
     {
        break;
     }
     if(map[row][i]=='Y')//如果(row,col)上面的先是遇到机枪,则跪
     {
        ;
     }
  }
  ;
}
void backtrack(int k,int cur)//K表示放置炮塔的位置(1~16),cur表示当前放置的总数
{
   int x,y;
   if(k==n*n)
   {
       if(cur>best)
       {
           best=cur;
       }
       return;
   }
   else
   {
     x=k/n;
     y=k%n;
     if(map[x][y]=='.'&& canput(x,y))
     {
        map[x][y]='Y';
        backtrack(k+,cur+); //加入此机枪点,深度dfs
        map[x][y]='.';   //不加入此机枪点,回溯
     }
     backtrack(k+,cur);//(x,y)能加入机枪却不加 和 不能加入机枪的两种情况统一在此处理
     //即处理下一个点而认为不加入
   }
}
int main()
{
//    freopen("in.txt","r",stdin);
    )
    {
       best=;
       ;i
       {
          ;j
          {
             char ch=getchar();
             if(ch=='\n') //为了吸收每个句尾的回车
             {
                j--;
                continue;
             }
             else map[i][j]=ch;
          }
       }
       backtrack(,);
       printf("%d\n",best);
    }
    ;
}

【搜索 回溯】 zoj 1002的更多相关文章

  1. DFS ZOJ 1002/HDOJ 1045 Fire Net

    题目传送门 /* 题意:在一个矩阵里放炮台,满足行列最多只有一个炮台,除非有墙(X)相隔,问最多能放多少个炮台 搜索(DFS):数据小,4 * 4可以用DFS,从(0,0)开始出发,往(n-1,n-1 ...

  2. nyist 488 素数环(搜索+回溯)

     素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 有一个整数n,把从1到n的数字无反复的排列成环,且使每相邻两个数(包含首尾)的和都为素数,称为素数环. ...

  3. Leetcode之深度优先搜索&回溯专题-491. 递增子序列(Increasing Subsequences)

    Leetcode之深度优先搜索&回溯专题-491. 递增子序列(Increasing Subsequences) 深度优先搜索的解题详细介绍,点击 给定一个整型数组, 你的任务是找到所有该数组 ...

  4. Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III)

    Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III) 深度优先搜索的解题详细介绍,点击 在二维网格 grid 上,有 4 种类型的方格: 1 ...

  5. Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game)

    Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game) 深度优先搜索的解题详细介绍,点击 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+, ...

  6. Leetcode之深度优先搜索&回溯专题-638. 大礼包(Shopping Offers)

    Leetcode之深度优先搜索&回溯专题-638. 大礼包(Shopping Offers) 深度优先搜索的解题详细介绍,点击 在LeetCode商店中, 有许多在售的物品. 然而,也有一些大 ...

  7. [ZOJ 1002] Fire Net (简单地图搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002 题目大意: 给你一个n*n的地图,地图上的空白部分可以放棋 ...

  8. ZOJ 1002:Fire Net(DFS+回溯)

    Fire Net Time Limit: 2 Seconds      Memory Limit: 65536 KB Suppose that we have a square city with s ...

  9. ZOJ 1002 DFS

    Fire Net Time Limit: 2 Seconds      Memory Limit: 65536 KB Suppose that we have a square city with s ...

随机推荐

  1. document.body 和 document.documentElement 的区别

    document.body 和 document.documentElement 的区别 : www.cnblogs.com/scy251147/archive/2011/04/10/2011420. ...

  2. apt-get 安装路径

    apt-get安装目录和安装路径:apt-get 下载后,软件所在路径是:/var/cache/apt/archivesubuntu 默认的PATH为PATH=/home/brightman/bin: ...

  3. java 视频中截图

    package com.sun.test; import java.io.File; import java.util.List; public class CreatePh { //public s ...

  4. 浙大pat 1037

    1037. Magic Coupon (25) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The magi ...

  5. JavaScript原生对象总纲

    一. javascript之Array类 创建js数组两种方式: var arr = [];  或var arr = new Array(); ()里可以指定长度,也可以不指定,指不指定都无所谓,因为 ...

  6. MS13-069(CVE-2013-3205) CCaret use-after-free Vulnerability Analysis (2014.9)

    MS13-069(CVE-2013-3205) CCaret use-after-free Vulnerability Analysis 1. Introduction In IE's standar ...

  7. GitHub使用指导

    GitHub 用过Git的小伙伴想必都知道GitHub是个什么东东,我这里就简单介绍一下吧.Git是一个分布式的版本控制系统,而GitHub可以托管各种Git库,并提供一个Web界面,方便查看Git库 ...

  8. jQuery(2)——选择器

    选择器 利用jQuery选择器,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为.jQuery的行为规则都必须在获取到元素后才能生效. [jQuery选择器的优势] (1)简洁的写法 ...

  9. Android中的Fragment页面切换和selector选择器

    效果如图: 提示:下面是用的整个的图片 下面看代码: //--------------------这是主页面布局文件----------------------- <?xml version=& ...

  10. javascript中函数的call,apply及bind方法

    call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,  [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象. ...