codevs1536 海战
来源:互联网 发布:php pdo bindvalue 编辑:程序博客网 时间:2024/04/30 03:36
题目
codevs1536 海战
题解
虽然说是一道白银,但是我刚看到的时候还是毛有思路啊!!
遍历矩阵,找一个没到过的格子(xx,yy)作为当前矩形的左上角,开始BFS,如果过程中出现x< xx||y< yy的话就是不可能的(手画一下就可以看出),如果没有出现这样的情况,就记录x坐标,y坐标的最大值maxx,maxy,然后记录一下到过的格子数cnt,如果cnt==(maxx-xx+1)*(maxy-yy+1)说明这个矩形是满的,当前矩形符合要求,一个一个找就行了
代码
#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=1000+10;const int dx[]={-1,0,1,0};const int dy[]={0,1,0,-1};char map[maxn][maxn];int vis[maxn][maxn],n,m;struct Node{ int x,y; Node(int x=0,int y=0):x(x),y(y){}};int inside(int x,int y){return x>=1&&x<=n&&y>=1&&y<=m;}int BFS(int xx,int yy){ int maxx=xx,maxy=yy,cnt=0; queue<Node>q; q.push(Node(xx,yy)); vis[xx][yy]=1; while(!q.empty()) { Node k=q.front();q.pop(); cnt++; for(int i=0;i<4;i++) { int nx=k.x+dx[i],ny=k.y+dy[i]; if(inside(nx,ny)&&map[nx][ny]=='#'&&!vis[nx][ny]) { vis[nx][ny]=1; maxx=max(maxx,nx); maxy=max(maxy,ny); q.push(Node(nx,ny)); if(nx<xx||ny<yy) return false; } } } if(cnt==(maxx-xx+1)*(maxy-yy+1)) return true; return false;}int main(){ cin>>n>>m; int cnt=0; for(int i=1;i<=n;i++)scanf("%s",map[i]+1); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(!vis[i][j]&&map[i][j]=='#') if(!BFS(i,j)) { printf("Bad placement.\n");return 0; } else cnt++; printf("There are %d ships.",cnt); return 0;}
1 0
- codevs1536 海战
- 海战
- 海战游戏
- [vijosP1076]海战
- 【u006】海战
- 《疯狂海战》策划案
- 蓝海战略
- 蓝海战略
- 蓝海战略?
- 蓝海战略
- 蓝海战略
- 《蓝海战略》读书笔记
- POJ 1856(海战)
- 【其他】wikioi 1536 海战
- 蓝海战略
- codevs 1536 海战
- C语言模拟海战
- 【codevs 1536】海战
- 【操作系统】Tips(持续更新)
- APP引导页的实现
- POJ 3061 Subsequence(尺取法)
- 浅析关联引用
- php对一次请求处理过程或生命周期详解
- codevs1536 海战
- 第四次上机实践项目-项目1-三角形类椎体-(3)
- Java-HashMap源码分析
- 对于ThinkPHP入口文件以及模块目录结构的学习
- android之Androidstudio下查找sha1
- 第4周项目2-太乐了
- 一个简单的例子教你明白XMLHTTPRequest的原理
- 【JavaScript】JavaScript中的checkbox之全选、全不选、反选
- 以前写的数据结构课设