[USACO06JAN] The Grove S

news2024/11/26 2:53:07

题目

在这里插入图片描述

思路

一眼bfs
为了保证bfs能够绕一个圈,我们将这个联通块的最下面的点的下方割去,如图
在这里插入图片描述
绿色的地方就是割去的地方,然后我们再加个判断,使bfs从起点出发转一圈,再把这条分割线的左右两边步数最小连起来,就出答案了
理论存在,实践开始

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
int n,m;
char a[maxn][maxn];
int d[maxn][maxn];
int p,q;
queue<pair<int,int> > Q;
void bfs(){
	memset(d,-1,sizeof(d));
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]=='*') d[i][j]=0,Q.push(make_pair(i,j));
	while(!Q.empty()){
		auto [x,y]=Q.front();Q.pop();
		for(int k=0;k<8;k++){
			int xx=x+dx[k],yy=y+dy[k];
			if(y==q&&x>=p&&(k==2||k==4||k==7)) continue;
			if(y==q+1&&x>=p) if(x==p) { if(k==5) continue; } else if(k==0||k==3||k==5) continue;
			if(a[xx][yy]=='.'&&d[xx][yy]==-1) d[xx][yy]=d[x][y]+1,Q.push(make_pair(xx,yy));
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i]+1;
	for(int i=n;i&&!p;i--) for(int j=1;j<=m;j++) if(a[i][j]=='X') { p=i,q=j;break; }
	bfs();
	int ans=1<<30;
	for(int i=p+1;i<=n;i++) for(int j=-1;j<=1;j++) if(d[i][q]!=-1&&d[i+j][q+1]!=-1) ans=min(ans,d[i][q]+d[i+j][q+1]+1);
	cout<<ans;
	return 0;
}

dx,dy的说明

(dx[0],dy[0]):左上
(dx[1],dy[1]):上
(dx[2],dy[2]):右上
(dx[3],dy[3]):左
(dx[4],dy[4]):右
(dx[5],dy[5]):左下
(dx[6],dy[6]):下
(dx[7],dy[7]):右下

如何才能让bfs不过分割线

首先看第一个判断

if(y==q&&x>=p&&(k==2||k==4||k==7)) continue;

在这里插入图片描述
蓝色部分为判断范围,如果说搜到这个判定范围,就判断一下是否是向右走,若是就跳过,来保证bfs顺时针转而不过分割线

if(y==q+1&&x>=p) if(x==p) { if(k==5) continue; } else if(k==0||k==3||k==5) continue;

这个情况是bfs已经绕了一圈到分割线右侧

end

完结撒花

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字世界未来十年面貌如何?

随着科技的不断发展和创新&#xff0c;数字世界将在未来十年迎来一系列革命性的变化和进步。以下是数字世界未来十年面貌的一些预测&#xff1a; 人工智能全面普及&#xff1a;人工智能将逐渐渗透到我们生活的方方面面。从智能家居到智能交通&#xff0c;从个性化医疗到智能零售…

【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接

前言&#xff1a;最近项目上需要使用富文本编辑器&#xff0c;觉得tinymce很不错就用了&#xff0c;具体怎么在项目中使用参考 【vue】 vue2 中使用 Tinymce 富文本编辑器 【vue】 Tinymce 数据 回显问题 | 第一次正常回显后面&#xff0c;显示空白bug不能编辑 这两天又遇到了…

早在植物到达之前,泥土就可能形成蜿蜒的河流

在这张卫星视图中可以看到加利福尼亚州死亡谷国家公园恶水盆地的蜿蜒河道。在世界各地的贫瘠环境中都可以找到类似的单线通道&#xff0c;这些环境主要由细粒沉积物组成&#xff0c;几乎没有植被。 图片来源&#xff1a;Google 地球&#xff0c;2023 年 资料来源&#xff1a;地…

奔驰CAN FD嵌入式控制器开发硬件设计及应用趋势

CAN FD作为一种性能可靠、功能完善、成本合理的远程网络通信控制方式&#xff0c;集成CAN/CAN FD控制器的MCU、核心板、工控板及物联网解决方案已经被广泛应用到各个控制系统中&#xff0c;例如汽车电子、自动控制、智能大厦、电力系统、能源物流、智慧改装等各个领域。 中国经…

【ARM Coresight 系列文章 2.4 - Coresight 寄存器:DEVARCH,DEVID, DEVTYPE】

文章目录 1.1 DEVARCH(device architecture register)1.2 DEVID(Device configuration Register)1.3 DEVTYPE(Device Type Identifier Register) 1.1 DEVARCH(device architecture register) DEVARCH 寄存器标识了coresight 组件的架构信息。 bits[31:21] 定义了组件架构&…

深度学习(32)——CycleGAN

深度学习&#xff08;32&#xff09;——CycleGAN 文章目录 深度学习&#xff08;32&#xff09;——CycleGAN1. GAN原理2. CycleGAN&#xff08;1&#xff09;原理&#xff08;2&#xff09;核心思想&#xff08;3&#xff09;优点&#xff08;4&#xff09;缺点&#xff08;5…

【蓝牙通信】两个Hc-05之间的通信(教程)

目录 1、准备两个蓝牙模块&#xff0c;一个主机&#xff0c;一个从机 2、进入AT状态 3、蓝牙状态指示灯 4、具体步骤 1、准备两个蓝牙模块&#xff0c;一个主机&#xff0c;一个从机 2、进入AT状态 进入AT状态有2种方法&#xff1a; 1.先按住按键不放&#xff0c;再给模块…

IDEA SpringBoot项目引入外部jar并打包

1、首先&#xff0c;我们再pom.xml中导入依赖包时&#xff0c;打包可以正常进行。 但如果我们引入了第三方的外部jar包&#xff08;这里需要先把jar包添加到该项目依赖库中&#xff0c;这里不做演示&#xff09;&#xff0c;如图 2、导致打包时报错&#xff0c;程序包不存在或…

识别动物的软件,动物园碰到不认识的动物就用它

动物是人类的好朋友&#xff0c;我们常常会在动物园、公园等地方看到各种各样的动物。但是有时我们会遇到一些不认识的动物&#xff0c;这时我们应该怎么办呢&#xff1f;下面将介绍一些识别动物的方法以及遇到不认识动物的应对方法。 识别动物的方法 要想识别一个动物&#x…

【长链剖分】icpc 2022西安 L

Problem - L - Codeforces 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxe1e610;vector<int> G[mxn],lp;int N,Fa; int son[mxn],len[mxn];void dfs1(…

Apriori关联规则挖掘

在某个商场&#xff0c;销售经理希望通过重新布置商品的摆放情况来提高销售额&#xff0c;那么该如何摆放既有利于方便顾客购买&#xff0c;也刺激顾客的购买欲呢&#xff1f;商品的摆放并不是随意的&#xff0c;首先是将同类商品放在一起外&#xff1b;其次&#xff0c;可以考…

shell脚本练习--安全封堵脚本,使用firewalld实现

一.什么是安全封堵 安全封堵&#xff08;security hardening&#xff09;是指采取一系列措施来增强系统的安全性&#xff0c;防止潜在的攻击和漏洞利用。以下是一些常见的安全封堵措施&#xff1a; 更新和修补系统&#xff1a;定期更新操作系统和软件包以获取最新的安全补丁和修…

OpenFrp

https://www.openfrp.net/ 建议实名认证 创建隧道 选择左边的节点&#xff0c;因为ssh是tcp应用&#xff0c;所以选择有tcp的节点 隧道名字随便 本地端口&#xff0c;因为我要用ssh&#xff0c;所以选22 远程端口可以选择下面的随机远程端口 提交 打开linux服务器 sudo ap…

管理类联考——写作——论说文——实战篇——行文篇——通用性强,解释多种现象的经典理论——谈好处

一个标题&#xff0c;三句开头&#xff0c;四层结构&#xff0c;两句结尾 谈好处 马斯洛需求层次理论 理论介绍 马斯洛需求层次理论是由美国著名社会心理学家马斯洛提出的关于需要结构的理论。该理论认为&#xff0c;人们需要动力实现某些需要&#xff0c;有些需求优先于其…

三、Spring源码-实例化

Spring源码-Bean的实例化 接下来我们看看Bean的实例化处理 一、BeanDefinition 首先我们来看看BeanDefinition的存放位置。因为Bean对象的实例化肯定是BeanFactory基于对应的BeanDefinition的定义来实现的&#xff0c;所以在这个过程中BeanDefinition是非常重要的&#xff0c;…

QGraphicsView基本初识别

拖拽如下控件&#xff1a; 然后实现效果&#xff1a; 圆形和矩形都可以移动&#xff0c;矩形、圆形就是图元&#xff0c;而图元放在我们创建的场景中&#xff0c;场景又透过多个视图来看到&#xff0c;其实可以理解成很多人偷窥你在吃饭的这个场景&#xff0c;饭和你这些角色…

使用UltraISO制作麒麟v10系统盘

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 文章目录 1 背景2 准备工作2.1 镜像准备2.2 制作工具2.3 启动U盘 3 制作步骤3.1 找到ISO文件&#xff0c;右…

ThingsKit物联网平台可视化之用户权限说明

角色设计 角色设计是软件设计中的一个重要环节&#xff0c;它决定了用户在软件系统中的使用体验和交互方式。在本系统中包含四类角色&#xff0c;分别是&#xff1a;超级管理员、平台管理员、租户、客户。以下是对应角色的关系及相关说明。 角色关系 角色说明 角色名称描述超…

css实现水平居中

代码示例 <div class"box"><div class"box1"></div> </div>1.弹性布局&#xff1a;&#xff08;推荐&#xff09; display:flex&#xff1b; 这些要添加在父级的&#xff0c;是父级的属性 //父级添加display:flex; //父级添加jus…

Django Rest_Framework(一)

1. Web应用模式 在开发Web应用中&#xff0c;有两种应用模式&#xff1a; 前后端不分离[客户端看到的内容和所有界面效果都是由服务端提供出来的。] 前后端分离【把前端的界面效果(html&#xff0c;css&#xff0c;js分离到另一个服务端或另一个目录下&#xff0c;python服务…