题意:给你一个正方形棋盘。每个棋子可以直线攻击,除非隔着石头。现在要求所有棋子都不互相攻击,问最多可以放多少个棋子。

这个题可以用搜索来做。每个棋子考虑放与不放两种情况,然后再判断是否能互相攻击来剪枝。最后取可以放置的最大值。

这里我转化成求最大独立集来做。

首先将每个空地编号,对于每个空地,与该位置可以攻击到的空地连边。找最多的空地使得不互相攻击,即求该图的最大独立集。与搜索做法基本一致,但是说法略有不同。

 #include<iostream>
 #include<cstring>
 #include<cmath>
 #include<algorithm>
 #include<cstdlib>
 #include<cstdio>
 #include<vector>
 using namespace std;
 ][];
 ][];
 ][];
 int n,cn,ans;
 ];
 void init()
 {
     memset(gl,,sizeof(gl));
     cn=;
     ; i<n; ++i)
         ; j<n; ++j)
             if(grid[i][j]=='.')
                 g[i][j]=++cn;
             ;
     ; i<n; ++i)
         ; j<n; ++j)
             if(grid[i][j]=='.')
             {
                 int &now=g[i][j];
                 ; k<n&&g[i][k]; ++k)
                     gl[now][g[i][k]]=true;
                 ; k>=&&g[i][k]; --k)
                     gl[now][g[i][k]]=true;
                 ; k<n&&g[k][j]; ++k)
                     gl[now][g[k][j]]=true;
                 ; k>=&&g[k][j]; --k)
                     gl[now][g[k][j]]=true;
             }
     ans=;
     memset(col,,sizeof(col));

 }
 void dfs(int d,int res)
 {
     if(d>cn) ans=max(ans,res);
     else
     {
         bool ok=true;
         ; i<=cn; ++i)
             if(gl[d][i]&&col[i]) ok=false;
         if(ok)
         {
             col[d]=true;
             dfs(d+,res+);
             col[d]=false;
         }
         dfs(d+,res);
     }
 }
 int main()
 {
     while(scanf("%d",&n)!=EOF&&n)
     {
         ; i<n; ++i)
             scanf("%s",grid[i]);
         init();
         dfs(,);
         printf("%d\n",ans);
     }
     ;
 }

HDU 1045 - Fire Net (最大独立集)的更多相关文章

  1. HDOJ(HDU).1045 Fire Net (DFS)

    HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...

  2. hdu 1045 Fire Net(最小覆盖点+构图(缩点))

    http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit:1000MS     Memory Limit:32768KB   ...

  3. HDU 1045(Fire Net)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...

  4. HDU 1045 Fire Net 【连通块的压缩 二分图匹配】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)    ...

  5. HDU 1045 Fire Net(dfs,跟8皇后问题很相似)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)   ...

  6. HDU 1045——Fire Net——————【最大匹配、构图、邻接矩阵做法】

    Fire Net Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  7. HDU 1045 Fire Net 状压暴力

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)  ...

  8. HDU 1045 Fire Net 二分图建图

    HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...

  9. HDU - 1045 Fire Net(二分匹配)

    Description Suppose that we have a square city with straight streets. A map of a city is a square bo ...

随机推荐

  1. 在Ubuntu 14 上安装 Nginx-RTMP 流媒体服务器

    一:RTMP RTMP流媒体协议是 一套 Adobe 开发的音频视频实时传输协议: 二:Nginx-rtmp nginx-rtmp 是一个基于nginx的 RTMP服务模块,开源,免费 https:/ ...

  2. SAP MM常用表

    EBAN 采购申请 MM模块EBAN_采购申请 EBKN 采购申请帐户设置 MM模块EBKN_采购申请帐户设置 EBUB 有关物料的运输请求的索引 MM模块EBUB_有关物料的运输请求的索引 EINA ...

  3. $.get的重写

    window.meng = window.meng || {}; (function () { function Get() { this.def = $.Deferred(); } Get.prot ...

  4. 8.3 ContosoMVCWeb官方案例学习

    1. 分页案例学习 2. 排序搜索案例学习 3.使用Configuration.cs中的Seed方法 在数据库迁移过程中,使用update-database,会运行seed方法.seed方法能够将初始 ...

  5. 一些用于数据整理的excel函数

    我们经常要从外部数据源(如数据库.文本文件或网页等)将数据导入excel中,但是此类数据往往比较混乱,无法满足我们的要求,因此在进行数据分析之前,需要将这些数据进行整理清洗,excel由于将数据的管理 ...

  6. php-fpm的重启/关闭

    php 5.3.3 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制: ...

  7. word linkage 选择合适的聚类个数matlab code

    clear load fisheriris X = meas; m = size(X,2); % load machine % load census % % X = meas; % X=X(1:20 ...

  8. 聚类算法:K-means 算法(k均值算法)

    k-means算法:      第一步:选$K$个初始聚类中心,$z_1(1),z_2(1),\cdots,z_k(1)$,其中括号内的序号为寻找聚类中心的迭代运算的次序号. 聚类中心的向量值可任意设 ...

  9. YanYan Self Introduction

      My Website: http://finehappy.com/

  10. 关于JDBC

    脑补一下JDBC基础知识,原文链接:http://docs.oracle.com/javase/tutorial/jdbc/basics/gettingstarted.html If you are ...