HDU-1045 Fire NetFire Net 最大团
题意:给定一个棋盘,如果在某一个点放置棋子,那么这个棋子出现的行和列都不够有其他的棋子,除非他们之间有墙相隔。现在给定一个含有墙的和空地的棋盘,问最多能够放置多少棋子。
解法:将所有为"."的点保存起来,如果两个点不在同一行且不在同一列,那么在两个点之间连一条边,否则判定两点之间是否有墙相隔,有的话连边,否则不连,最后求一个最大团即可。
代码如下:
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std;int N, nd[20], idx, G[20][20]; char mp[10][10];bool check(int a, int b) {int x1 = nd[a]/N, y1 = nd[a]%N;int x2 = nd[b]/N, y2 = nd[b]%N;if (x1 != x2 && y1 != y2) return true;if (x1 == x2) { // 如果是在同一行for (int i = y1+1; i < y2; ++i) {if (mp[x1][i] == 'X') {return true;}}}else if (y1 == y2) {for (int i = x1+1; i < x2; ++i) {if (mp[i][y1] == 'X') {return true;}}}return false; }void build() {memset(G, 0, sizeof (G));for (int i = 0; i < idx; ++i) {for (int j = i+1; j < idx; ++j) {G[i][j] = G[j][i] = check(i, j);}} }int ret, cnt[20], st[20];void dfs(int x, int num) {for (int i = x+1; i < idx; ++i) {if (!G[x][i]) continue;if (cnt[i] + num <= ret) return;int flag = true;for (int j = 0; j < num; ++j) {if (!G[i][st[j]]) {flag = false;break;}}if (flag) {st[num] = i;dfs(i, num+1);}}if (num > ret) {ret = num;} }int query() {ret = 0;for (int i = idx-1; i >= 0; --i) {st[0] = i;dfs(i, 1);cnt[i] = ret;}return ret; }int main() {while (scanf("%d", &N), N) {idx = 0;for (int i = 0; i < N; ++i) {scanf("%s", mp[i]);for (int j = 0; j < N; ++j) {if (mp[i][j] == '.') {nd[idx++] = i*N+j;}}}build();printf("%d\n", query());}return 0; }
转载于:https://www.cnblogs.com/Lyush/archive/2013/04/02/2996712.html
HDU-1045 Fire NetFire Net 最大团相关推荐
- hdu 1045 Fire Net
经典建模. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...
- (匹配)Fire Net --hdu --1045
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 杭电 1045 Fire Net
题意:地图中最多能放多少炮台. 解法:深搜. ac代码: View Code #include<iostream> using namespace std;char map[8][8]; ...
- 【HDU - 1045】Fire Net (dfs 或二分图)
题干: Suppose that we have a square city with straight streets. A map of a city is a square board with ...
- hdoj 1045 Fire Net 直接枚举 模拟就好了
题目链接 直接枚举所有结果就可以了, 就是第一次模拟这样的数据 每个位置若没有阻挡物,存在着两种状态,一是有堡垒,二是空地.直接枚举就可以了. 自己的代码写的很繁琐,但是 首次想到了 将if(y> ...
- kuangbin带你飞专题合集
题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...
- 算法学习经典例题整理
陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- C语言求数列最小公倍数,C语言复习---获取最小公倍数(公式法:两个数相乘等于最小公倍数乘以最大公约数)...
Android 图片浏览器 从原来位置放大至全屏显示 android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自 ...
最新文章
- 第十章 Linux下RPM软件的安装与卸载
- 3个可以写进简历的京东AI NLP项目实战,走完这五步就是Top算法工程师
- C# 设置Word文档保护(加密、解密、权限设置)
- Swig在Mac OS X上的安装
- JVM中的垃圾收集算法和Heap分区简记
- UI标签库专题十:JEECG智能开发平台 Form(form标签)
- python苦逼_自学Python编程的第十天(希望有IT大牛看见的指点小弟我,万分感谢)---------来自苦逼的转行人...
- uwsgi+django在ubuntu下命令部署亲测ok
- LeetCode 209. 长度最小的子数组 (滑动窗口)
- php session 不通过cookie_PHP会话控制机制中,Cookie和Session的应用,你更喜欢谁
- ubuntu环境下载android源码
- 事件驱动架构在 vivo 内容平台的实践
- 生物信息学服务器 cpu配置,0[生信技能树]生信服务器配置全攻略
- 程序员面试华为,面试官出了这样一个面试题,网友:题目太难了
- wps加载失败模板文件损坏_Normal模板异常损坏的修复方法
- 基于Springboot+vue的办公OA系统#毕业设计
- Y2K Accounting Bug POJ - 2586
- (补)单片机原理及应用学习笔记(三)
- Blender新手入门练习 宝剑
- 入门视频采集与处理(BT656简介)
热门文章
- applet mysql_applet数字签名_java applet读取mysql_软件数字签名(5)
- MySQL8.0.12 EXPLAIN EXTENDED 报错问题
- shell编程cp强制覆盖拷贝时仍需确认问题的处理方法
- [Algorithm] Write your own Math.pow function in Javascript, using Recursive approach
- Mybatis动态sql及性能优化-3
- openvas-tutorial-for-beginners
- 再谈代码生成器,xml+xslt,结合扩展,用上设计模式。
- 信号的概念以及网络布线
- 在微型计算机中1G标准等于,微型计算机的基础知识概要.ppt
- 华为 “OSPF” 被动接口配置