题目链接:http://acm.hrbust.edu.cn/vj/index.php?/vj/index.php?c=&c=contest-contest&cid=134#problem/1

大概用二分图缩点建图是比较简单的。深搜也遇见了一些问题。

比如。深搜的临界点我还是要单独判断最后一个点是不是符合条件的。这不科学。

然后。判断当前点所在行和列是不是符合条件的时候。我是只判断了它前面的,大概就是,所有满足条件的几个位置我都是优先放在最前面?但是好像深搜已经把左右的情况都包括了吧。T_T还不太懂。

// dfs + 深搜

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int n;
char mp[][];
int ans; bool check(int row, int col) {
for (int i=col-; i>=; --i) {
if (mp[row][i] == 'a') { // 检查该行是否已经有没墙阻隔的大炮。
return false;
}
else if (mp[row][i] == 'X')
break;
} for (int i=row-; i>=; --i) {
if (mp[i][col] == 'a') { // 检查该列是否已经有没有墙阻隔的大炮了。
return false;
}
else if (mp[i][col] == 'X') {
break;
}
}
return true;
} void dfs(int con, int tot) {
if (con == n*n-) {
if (mp[n-][n-] == '.' && check(n-, n-))
ans = max(ans, tot);
else ans = max(ans, tot-);
return;
} int row = con / n;
int col = con % n; if (mp[row][col] == '.' && check(row, col)) {
// cout << con << "......" << tot << endl;
mp[row][col] = 'a';
dfs(con+, tot+);
mp[row][col] = '.';
}
dfs(con+, tot);
} int main() {
while(cin >> n) {
if (n == ) break;
for (int i=; i<n; ++i) {
for (int j=; j<n; ++j) {
cin >> mp[i][j];
}
} ans = ;
dfs(, ); // 第一个参数表示当前格子的编号 第二个参数表示当前要安装的大炮编号。
//cout << "====";
cout << ans << endl;
}
return ;
}

HDU 1045 dfs + 回溯的更多相关文章

  1. HDU 1045 (DFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:在不是X的地方放O,所有O在没有隔板情况下不能对视(横行和数列),问最多可以放多少个 ...

  2. HDU 1045 dfs

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

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

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

  6. HDU 1016 素数环(dfs + 回溯)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...

  7. 【HDU - 2181】哈密顿绕行世界问题(dfs+回溯)

    -->哈密顿绕行世界问题 Descriptions: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市.  Input 前2 ...

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

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

  9. HDU 1045(Fire Net)题解

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

随机推荐

  1. Day02 html回顾和CSS介绍

    昨天内容回顾     1.html的操作思想         ** 使用标签把要操作的数据包起来,通过修改标签的属性值来实现标签内数据样式的变化         *** <font size=& ...

  2. android(十四)四种启动模式

    standard 启动的activity会每次都重新创建一个activity放到任务栈中.这是系统默认的启动模式. singleTop启动的activity,如果任务的栈顶刚好存在当前的activit ...

  3. HBase1.2.0增删改查Scala代码实现

    增删改查工具类 class HbaseUtils { /** * 获取管理员对象 * * @param conf 对hbase client配置一些参数 * @return 返回hbase的HBase ...

  4. Ajax保留浏览器历史的两种解决方案(Hash&Pjax)

    总是在github down点东西,github整个界面做的不错,体验也很好~对于其中的源代码滑动的特效最为喜欢了~刚开始以为这个只是普通的ajax请求效果,但是发现这个特效能够导致浏览器地址栏跟随变 ...

  5. 系统管理命令之logname

    logname命令,可以显示自己初次登录到系统中的用户名,主要识别sudo前后情形,与whoami相反. 1.查看该命令的帮助信息. # logname --help 2.查看该命令的版本信息. # ...

  6. 网关服务Spring Cloud Gateway(二)

    上一篇文章服务网关 Spring Cloud GateWay 初级篇,介绍了 Spring Cloud Gateway 的相关术语.技术原理,以及如何快速使用 Spring Cloud Gateway ...

  7. .Ignite是什么

    Ignite是什么 Apache Ignite内存数据组织是高性能的.集成化的以及分布式的内存平台,他可以实时地在大数据集中执行事务和计算,和传统的基于磁盘或者闪存的技术相比,性能有数量级的提升.  ...

  8. jmeter导入csv压测

    压测csv数据源(设置为utf-8格式),jmeter不需要第一行参数名 新建一个线程组,根据压测数据调整设置需要的循环次数(测试数据有9行,设置循环次数为9) 添加http头信息 Content-T ...

  9. wamp server 3.0.0 修改默认浏览器,软件语言和配置文件编辑器

    改默认IE浏览器为Chrome: wampmanager.conf : navigator ="C:\Program Files (x86)\Google\Chrome\Applicatio ...

  10. Linux内核分析 05

    扒开系统调用的三层皮(下) 一,给MenuOS增加time和time-asm命令 把time和time-asm添加到MenuOS里面去 作为命令.扩展MenuOS的功能.本周把上周增加的系统调用添加进 ...