【codevs 1536】海战
来源:互联网 发布:新中装 淘宝 编辑:程序博客网 时间:2024/04/30 07:24
题目描述 Description
在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机。此外,巡洋船只和舰队将被派去保护海岸线。不幸的是因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战。因此,他们考虑培养一些新的海军指挥官,他们选择了“海战”游戏来帮助学习。
在这个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船。在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写程序求出该棋盘上放置的船只的总数。
输入描述 Input Description
输入文件头一行由用空格隔开的两个整数R和C组成,1<=R,C<=1000,这两个数分别表示游戏棋盘的行数和列数。接下来的R行每行包含C个字符,每个字符可以为“#”,也可为“.”,“#”表示船只的一部分,“.”表示水。
输出描述 Output Description
为每一个段落输出一行解。如果船的位置放得正确(即棋盘上只存在相互之间不能接触的方形,如果两个“#”号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相互接触了)。就输出一段话“There are S ships.”,S表示船只的数量。否则输出“Bad placement.”。
样例输入 Sample Input
6 8
…..#.#
##…..#
##…..#
…….#
#……#
#..#…#
样例输出 Sample Output
There are 5 ships.
找由‘#’组成的方形的个数。
注意判断是否接触
接触的几种情况:
每次以红色点为基准判断就好
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn=1000+1;char s[maxn][maxn];bool used[maxn][maxn],z=0;;int k[maxn][maxn];int n,m,sum;int dx[]={0,1,0,-1},dy[]={1,0,-1,0};struct node{ int x,y;};bool can(int x,int y){ if(x>=n||y>=m||x<0||y<0) return 0; if(used[x][y]) return 0; return 1;}void bfs(int a,int b){ queue<node>q; while(!q.empty()) q.pop(); q.push((node){a,b}); used[a][b]=1; while(!q.empty()) { node f=q.front(); q.pop(); for(int i=0;i<4;i++) { node n; n.x=f.x+dx[i]; n.y=f.y+dy[i]; if(can(n.x,n.y)&&s[n.x][n.y]=='#') { q.push(n); used[n.x][n.y]=1; if(s[n.x-1][n.y]=='#'&&s[n.x][n.y+1]=='#'&&s[n.x-1][n.y+1]!='#') z=1; else if(s[n.x][n.y-1]=='#'&&s[n.x+1][n.y]=='#'&&s[n.x+1][n.y-1]!='#') z=1; else if(s[n.x+1][n.y]=='#'&&s[n.x][n.y+1]=='#'&&s[n.x+1][n.y+1]!='#') z=1; else if(s[n.x-1][n.y]=='#'&&s[n.x][n.y-1]=='#'&&s[n.x-1][n.y-1]!='#') z=1; } } }}int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>s[i][j]; } for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(s[i][j]=='#'&&!used[i][j]) { bfs(i,j); if(z==1) { puts("Bad placement."); return 0; } else sum++; } } cout<<"There are "<<sum<<" ships."<<'\n'; return 0;}
阅读全文
0 0
- codevs 1536 海战
- 【codevs 1536】海战
- 【codevs 1536】海战
- Codevs 1536 海战 (DFS || BFS)+判断
- 【其他】wikioi 1536 海战
- 海战
- 海战游戏
- codevs1536 海战
- [vijosP1076]海战
- 【u006】海战
- 《疯狂海战》策划案
- 蓝海战略
- 蓝海战略
- 蓝海战略?
- 蓝海战略
- 蓝海战略
- 《蓝海战略》读书笔记
- POJ 1856(海战)
- JavaScript 变量类型与类型转换
- 机器学习基石-03-4-learning with different Input Space
- Linux 内存管理框架
- MXNet框架如何自定义evaluation metric
- MySQL事务隔离级别详解
- 【codevs 1536】海战
- Oracle数据库的导入导出
- Dasha and Stairs
- 关键字--rowid rownum用法
- 编程修养
- 【P1902】T12 刺杀大佬【雾】(二分答案+bfs)
- ntdll错误
- PullToRefreshGridView的使用
- android 触发器