当前位置: 首页 > news >正文

洛谷 P1331:海战 ← Flood fill

【题目来源】
https://www.luogu.com.cn/problem/P1331

【题目描述】
在一个方形的盘上,放置了固定数量和形状的船只,每只船却不能碰到其它的船。在本题中,我们认为船是方形的,所有的船只都是由图形组成的方形
求出该棋盘上放置的船只的总数。

【输入格式】
第一行为两个整数 R 和 C,用空格隔开,分别表示游戏棋盘的行数和列数。
接下来 R 行,每行 C 个字符,为 # 或 .。# 表示船只的一部分,. 表示水。

【输出格式】
一行一个字符串,如果船的位置放得正确(即棋盘上只存在相互之间不能接触的方形,如果两个 # 号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相互接触了)。就输出 There are S ships.,S 表示船只的数量。否则输出 Bad placement.。

【输入样例一】

6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#

【输出样例一】
There are 5 ships.​​​​​​​

【输入样例二】

6 6
.....#
##...#
##...#
..#..#
.....#
######

【输出样例二】
Bad placement.

【数据范围】
对于 100% 的数据,1≤R, C≤1000。

【算法分析】
● 判断方法:若存在一个连通块不是方形(长方形或正方形),即若存在一个连通块的面积不等于它其中的 # 号的个数,就输出 Bad placement.。若所有连通块都是方形(长方形或正方形),则输出连通块的个数。

● ​​​​​​​特别注意:本题的陈述,个人认为存在晦涩难懂的地方。故结合样例分析题意后,将本文陈述中的“方形”理解为“长方形或正方形”,而不是一堆网文中所说的“正方形”后,所编写的代码 AC。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=1e3+5;
char mp[N][N];
int dx[]= {1,0,-1,0};
int dy[]= {0,1,0,-1};
int n,m,ans;
int cnt; //number of #
int min_x,max_x,min_y,max_y;
bool flag=true;void dfs(int x,int y) {mp[x][y]='.';cnt++;min_x=min(min_x,x),max_x=max(max_x,x);min_y=min(min_y,y),max_y=max(max_y,y);for(int i=0; i<4; i++) {int tx=x+dx[i];int ty=y+dy[i];if(tx>=0 && tx<n && ty>=0 && ty<m && mp[tx][ty]=='#') {dfs(tx,ty);}}
}bool is_rectangle() {int rect_area=(max_x-min_x+1)*(max_y-min_y+1);if(cnt!=rect_area) return false;/*for(int i=min_x; i<=max_x; i++) {for(int j=min_y; j<=max_y; j++) {if(mp[i][j]!='.') return false;}}*/return true;
}int main() {cin>>n>>m;for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {cin>>mp[i][j];}}for(int i=0; i<n && flag; i++) {for(int j=0; j<m && flag; j++) {if(mp[i][j]=='#') {cnt=0;min_x=max_x=i;min_y=max_y=j;dfs(i,j);ans++;if(!is_rectangle()) {flag=false;break;}}}}if(flag) printf("There are %d ships.",ans);else printf("Bad placement.");return 0;
}/*
in:
6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#out:
There are 5 ships.
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/118642238
https://www.cnblogs.com/-pwl/p/13647612.html
https://www.luogu.com.cn/problem/solution/P1331
https://www.shuzhiduo.com/A/gAJGErp0dZ/



 

http://www.jsqmd.com/news/435534/

相关文章:

  • 探讨日通机械在江苏的企业实力,选它做合作品牌推荐吗? - 工业品牌热点
  • 贾子思想纲领:底层逻辑的认知重构 |Kucius Thought Manifesto: Cognitive Restructuring of Underlying Logic
  • Java 面试汇总(1000 道附答案解析)
  • 2026年全国实力强的卧龙电气南阳防爆集团公司推荐,上海炬越值得选吗 - myqiye
  • 2026年旋流微泡曝气器厂家推荐:无堵塞/高效旋流曝气器/蘑菇头旋流曝气器/流剪切曝气器专业供应 - 品牌推荐官
  • 计算机毕业设计springboot儿童早教课程管理系统 基于SpringBoot的学前儿童智能选课服务平台 SpringBoot框架下的幼儿早期教育教务管理系统
  • wpf ToggleButton实现控制UI组件宽度,展开或收缩
  • 2026年哪些英国海外仓品牌机构靠谱,海云汇性价比高推荐给你 - 工业品网
  • 毕业论文降AI率分步骤教程:从检测到最终通过 - 我要发一区
  • 乘势“人工智能+”东风,海豚善学深耕AI创作教育,打造十五五职业新赛道人才培养标杆
  • 大表全表扫描(`SELECT * FROM big_table` 导致数据库宕机)
  • 2026年剖析海外仓代发服务,推荐几家性价比高的企业排名 - 工业推荐榜
  • 磐谷动力:以硬核动力装备赋能新型能源体系,助力“双碳”与新质生产力落地 - 速递信息
  • 全栈适配能力测评:国产信创DevOps平台兼容差异深度分析(2026)
  • 2026国内环境试验设备优质品牌推荐:干燥箱/快速耐候试验箱/恒温恒湿试验房/恒温恒湿试验机/换气式冷热冲击试验箱/选择指南 - 优质品牌商家
  • 聊聊东莞霞晖自动化靠不靠谱,广东地区该品牌口碑如何 - 工业设备
  • 专利设计知识产权保护指南:可信时间戳平台操作全解析
  • 2026年广东口碑好的美甲喷漆机服务商推荐,靠谱品牌全解析哪家好 - mypinpai
  • 2026年福建食堂生鲜/蔬菜/食材/肉类/食堂配送公司深度评估报告:全产业链整合能力成为决胜关键 - 2026年企业推荐榜
  • vim选择
  • 商标设计著作权保护新攻略:可信时间戳全流程认证指南
  • 2026年3月注塑加工厂家推荐,快速打样缩短上市周期 - 品牌鉴赏师
  • 文档能修改时间吗?文档时间修改方法汇总
  • 2月聚焦:2026年市面上热门污水处理设备企业有哪些,中水回用污水处理设备/进口树脂,污水处理设备销售厂家哪家好 - 品牌推荐师
  • 2026陕西玻璃钢雕塑与不锈钢雕塑五大推荐:材质双擎驱动景观艺术新实践 - 深度智识库
  • 【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
  • 2026年国产电动执行器全攻略:从行程类型到CCC认证的性价比之选 - 品牌推荐大师1
  • 天虹购物卡回收流程全面揭秘:省钱省力的独家技巧 - 团团收购物卡回收
  • kvm虚拟化11
  • 2026最新AI应用推荐!企业/慕课/教育/制造业等多场景权威榜单发布 - 十大品牌榜