Luogu P1331 海战
来源:互联网 发布:php cgi.exe 命令行 编辑:程序博客网 时间:2024/04/30 02:32
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!左边有个“赞”字,你就顺手把它点了吧
题目描述
在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机。此外,巡洋船只和舰队将被派去保护海岸线。不幸的是因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战。因此,他们考虑培养一些新的海军指挥官,他们选择了“海战”游戏来帮助学习。
在这个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船。在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写程序求出该棋盘上放置的船只的总数。
输入输出格式
输入格式:
输入文件头一行由用空格隔开的两个整数R和C组成,1<=R,C<=1000,这两个数分别表示游戏棋盘的行数和列数。接下来的R行每行包含C个字符,每个字符可以为“#”,也可为“.”,“#”表示船只的一部分,“.”表示水。
输出格式:
为每一个段落输出一行解。如果船的位置放得正确(即棋盘上只存在相互之间不能接触的方形,如果两个“#”号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相互接触了)。就输出一段话“There are S ships.”,S表示船只的数量。否则输出“Bad placement.”。
输入输出样例
输入样例#1:
6 8.....#.###.....###.....#.......##......##..#...#
输出样例#1:
There are 5 ships.
dfs模板题
评测记录 52ms / 5921KB
虽说这道题是我很久前写的,但是我今天突然想到,就把它翻了出来,因为这是一道很有代表性的搜索题目。
这道题的题目意思是,每个船只形状只能是一个矩形,如果两个船只靠在一起,那么就判定这个地图不合法。
想想便可知,如果出现两个矩形靠在一起,那么必然会有一个角上有三个*。我们可以举个例子:
....****...**.****...**.****...**.......
可以看出,这是一个合格的地图,它有两个船。那么,我们将左下角的船变化一下,使它不合法。
....****...*******...*******...***......
这时我们可以发现,(4, 1)
处出现了三个的情况,(4, 4)
处也出现了三个的情况,可是这种情况在原图形中是不存在的。这就说明了这种判断方法是正确的。
另外想说的事
本题其实是一道bfs模板题,但是也可以用dfs来解,由于这代码是我较早写的,那时我还不会bfs,所以我就用dfs来做了。有兴趣的朋友可以自行把它改为bfs版本。
然后,打了个dfs模板就很愉快地AC了
#include <iostream>using namespace std;int n, m;int mp[1010][1010];int ans;void dfs(int i, int j) { if(mp[i][j] == 0) return; mp[i][j] = 0; dfs(i+1, j); dfs(i, j+1); dfs(i-1, j); dfs(i, j-1);}int main() { cin >> n >> m; for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { char c; cin >> c; if(c == '#') mp[i][j] = 1; if(c == '.') mp[i][j] = 0; if(mp[i][j] + mp[i][j-1] + mp[i-1][j] + mp[i-1][j-1] == 3) { cout << "Bad placement."; return 0; } } } for(int i = 1; i <= n; ++i) { for(int j = 1; j <= m; ++j) { if(mp[i][j] == 1) { dfs(i, j); ++ans; } } } cout << "There are " << ans << " ships."; return 0;}
- Luogu P1331 海战
- Luogu P1331 海战
- 洛谷P1331 海战(老是打成寒战GG)
- 海战
- vijos-p1331 2008.11.6
- 海战游戏
- codevs1536 海战
- [vijosP1076]海战
- 【u006】海战
- 《疯狂海战》策划案
- 蓝海战略
- 蓝海战略
- 蓝海战略?
- 蓝海战略
- 蓝海战略
- 《蓝海战略》读书笔记
- POJ 1856(海战)
- 【其他】wikioi 1536 海战
- 欢迎使用CSDN-markdown编辑器
- 上传多张图片并压缩
- Java Notes: Synchronized的类锁和对象锁以及谈谈线性安全类
- C#之base和this关键字内部神秘面纱
- 异或进行最简单的加密
- Luogu P1331 海战
- When to use volatile with shared CUDA Memory
- DPDK
- 「算法精解_C语言描述」 链表_双向链表(接口定义)
- K-SVD字典学习及其实现(Python)
- 浅谈JQuery中$('.classname').get(0); $('.classname').eq(0); $('.classname')[0]三者的区别
- mysql时间处理
- 阿里巴巴获机器视觉顶级会议 ACM MM2020 主办权
- 阅面科技发布堪比服务器的终端视觉模块,将云端计算能力搬至终端