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

P1331 洛谷 海战

题目描述

在这里插入图片描述

思路

这个题需要读懂题意,即“什么样的形式表示两只船相撞?” ----> 上下相邻或左右相邻

 如果图是不和法的,一定存在如下结构:
# # 
. ## #
# .# .
# #. #
# #

即四个格子里有三个#,一个"."就表示相撞(找出的规律,后续可以用)
在这里插入图片描述
(借用一下洛谷题解大佬的图)
这样就表示两个不同的船只
即这个是dfs搜连通块的变形
数据量1000,还行

代码

基础的连通块
输出的时候有个。别忘了!

#include<bits/stdc++.h>

using namespace std;

const int N = 1e3+10;
char g[N][N];  //用字符串存储
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
bool st[N][N];  //这个其实也可以不要,直接在原图上修改
int n, m;
bool check(int x, int y)
{
	int ans = 0;
	if(g[x][y] == '#')
		ans++;
	if(g[x + 1][y] == '#')
		ans++;
	if(g[x][y + 1] == '#')
		ans++;
	if(g[x+1][y+1] == '#')
		ans++;
	if(ans == 3) //相撞
		return true;
	return false;
	
}
void dfs(int x, int y)
{
	for(int i = 0; i < 4; i++)
	{
		int xx = x +dx[i], yy = y +dy[i];
		if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && g[xx][yy] == '#' && !st[xx][yy])
		{
			st[xx][yy] = true;
			dfs(xx, yy);
		}
	}
}
int main()
{
	
	cin >> n >> m;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			cin >> g[i][j];
		}
	}
	int res = 0;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			if(check(i, j))
			{
				cout<<"Bad placement."<<endl;
				return 0;
			}
			if(!st[i][j]&&g[i][j] == '#') //没被搜过
			{
				res ++;
				st[i][j] = true;
				dfs(i, j);
//				cout<<"ok"<<endl;
			}
		}
	}
	printf("There are %d ships.\n", res);
	return 0;
}

总结

难点是如何理解船相撞,多画画图!

http://www.dtcms.com/a/123405.html

相关文章:

  • uni-app 开发安卓app提交审核时因 隐私协议被拒时
  • 数据结构与算法-动态规划-区间dp,状态机dp,树形dp
  • 虚拟内存详解
  • MyBatisX插件使用
  • PointNet++语义分割(semseg)训练自己的数据集并完成可视化并保存txt结果
  • HDCP(一)
  • QML自定义属性和方法
  • 深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点
  • threeJs实现裸眼3D小狗
  • 每天记录一道Java面试题---day38
  • Python设计模式-工厂模式
  • Python设计模式-抽象工厂模式
  • 探索 C 语言数据结构:从基础到实践
  • Design Compiler:中断命令/脚本的执行
  • 【汽车产品开发项目管理——端到端的汽车产品诞生流程】
  • Mysql表的操作(2)
  • (自用)蓝桥杯准备(需要写的基础)
  • 谷歌浏览器极速安装指南
  • 前端面试题(七):什么是vuex,请解释一下它在Vue中的作用
  • minio提供nfs服务
  • 全新突破 | 更全面 · 更安全 · 更灵活
  • 神经网络语言模型与统计语言模型的比较
  • Selenium中`driver.get(htmlfile)`方法可能出现的超时问题
  • 分布式id生成算法(雪花算法 VS 步长id生成)
  • Python Cookbook-5.12 检查序列的成员
  • DAY06:【pytorch】图像增强
  • day29-贪心__134. 加油站__135. 分发糖果__860.柠檬水找零__406.根据身高重建队列
  • 三分钟学会使用java RandomAccessFile随机读写IO
  • 数字内容体验的技术支持包含什么?
  • 公司内部建立apt源