Luogu P1331 海战
来源:互联网 发布:泰国地图导航软件 编辑:程序博客网 时间:2024/04/30 06:39
题目传送门:
主要思路:题目说了只有当两个'#'组成的方形连在一起时就输出"Bad placement.",
因为如果他们是连个独立的方形,就代表他们连在一起的四个格子中,肯定有一部分是只有3个'#',
所以只要出现这种情况就输出"Bad placement.".
剩下的呢,就是求图中的独立子图,直接用DFS来实现FLOODFILL,就是在遇见一个'#'时,
如果他没有被算进某个子图时,就以他为起点开始遍历,将所有能遍历的点都算进这个子图里,
因为前面已经判断过船不是方形的情况,直接输出答案总数就可以了.
附上代码:
#include <iostream>#include <cstdlib>#define MAXN 2010#define MAXM 2010using namespace std;string map[MAXN];bool book[MAXN][MAXM];int nextway[4][2]={{0,1},{0,-1},{1,0},{-1,0}};int n,m,ans,sum;void init(){int i,j;cin>>n>>m;for(i=1;i<=n;i++){cin>>map[i];}for(i=1;i<=n;i++){for(j=0;j<=m-1;j++){sum=0;if(map[i][j]=='#')sum++;if(map[i+1][j]=='#')sum++;if(map[i+1][j+1]=='#')sum++;if(map[i][j+1]=='#')sum++;if(sum==3){cout<<"Bad placement.";exit(0);}}}return;}void dfs(int x,int y){int tx,ty,k;for(k=0;k<=4-1;k++){tx=x+nextway[k][0];ty=y+nextway[k][1];if(tx<1 || tx>n || ty<0 || ty>m-1)continue;if(map[tx][ty]=='#' && book[tx][ty]==false){book[tx][ty]=true;dfs(tx,ty);}}return;}void out(){cout<<"There are "<<ans<<" ships.";return;}int main(){int i,j;init();for(i=1;i<=n;i++){for(j=0;j<=m-1;j++){if(map[i][j]=='#'&& book[i][j]==false){book[i][j]=true;ans++;dfs(i,j);}}}out();return 0;}
阅读全文
2 0
- Luogu P1331 海战
- Luogu P1331 海战
- 洛谷P1331 海战(老是打成寒战GG)
- 海战
- vijos-p1331 2008.11.6
- 海战游戏
- codevs1536 海战
- [vijosP1076]海战
- 【u006】海战
- 《疯狂海战》策划案
- 蓝海战略
- 蓝海战略
- 蓝海战略?
- 蓝海战略
- 蓝海战略
- 《蓝海战略》读书笔记
- POJ 1856(海战)
- 【其他】wikioi 1536 海战
- Android快速使用Gradle实现多渠道打包
- 微信小程序之底部导航栏(一)
- Xposed之helloworld
- 自动备份MySQL数据库
- React组件refs详解
- Luogu P1331 海战
- spring-1
- HOJ 2634 最大权闭合子图
- css中的@media only screen and ( ){}代码用来判断屏幕:当满足()中的条件时执行{}中的代码。 比如下面的代码:当屏幕宽度小于800px时内容区背景色为红色。 css中
- php通过会话控制实现身份验证
- ajax学习笔记之跨域jsonp
- ajax学习笔记之瀑布流
- 51Nod 1015 水仙花数
- C语言学习-指针