Wannafly Camp 2020 Day 6I 你吓到我的马了.jpg - BFS
暴力BFS即可
#include <bits/stdc++.h>
using namespace std;
int n,m,f[105][105];
char s[105][105];
struct pt {int x,y;};
bool check(int i,int j) {
if(i<=0 || i>n || j<=0 || j>m) return false;
if(s[i][j]=='X') return false;
return true;
}
int main() {
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>s[i]+1;
int si,sj;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(s[i][j]=='M') si=i,sj=j;
}
}
memset(f,0x3f,sizeof f);
f[si][sj]=0;
queue <pt> q;
q.push((pt){si,sj});
while(!q.empty()) {
int pi=q.front().x,pj=q.front().y;
q.pop();
int t=f[pi][pj];
if(check(pi+1,pj)) {
if(check(pi+2,pj+1)&&0x3f3f3f3f==f[pi+2][pj+1])f[pi+2][pj+1]=min(f[pi+2][pj+1],t+1),q.push((pt){pi+2,pj+1});
if(check(pi+2,pj-1)&&0x3f3f3f3f==f[pi+2][pj-1])f[pi+2][pj-1]=min(f[pi+2][pj-1],t+1),q.push((pt){pi+2,pj-1});
}
if(check(pi-1,pj)) {
if(check(pi-2,pj+1)&&0x3f3f3f3f==f[pi-2][pj+1])f[pi-2][pj+1]=min(f[pi-2][pj+1],t+1),q.push((pt){pi-2,pj+1});
if(check(pi-2,pj-1)&&0x3f3f3f3f==f[pi-2][pj-1])f[pi-2][pj-1]=min(f[pi-2][pj-1],t+1),q.push((pt){pi-2,pj-1});
}
if(check(pi,pj+1)) {
if(check(pi+1,pj+2)&&0x3f3f3f3f==f[pi+1][pj+2])f[pi+1][pj+2]=min(f[pi+1][pj+2],t+1),q.push((pt){pi+1,pj+2});
if(check(pi-1,pj+2)&&0x3f3f3f3f==f[pi-1][pj+2])f[pi-1][pj+2]=min(f[pi-1][pj+2],t+1),q.push((pt){pi-1,pj+2});
}
if(check(pi,pj-1)) {
if(check(pi+1,pj-2)&&0x3f3f3f3f==f[pi+1][pj-2])f[pi+1][pj-2]=min(f[pi+1][pj-2],t+1),q.push((pt){pi+1,pj-2});
if(check(pi-1,pj-2)&&0x3f3f3f3f==f[pi-1][pj-2])f[pi-1][pj-2]=min(f[pi-1][pj-2],t+1),q.push((pt){pi-1,pj-2});
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) cout<<(f[i][j]>1e9?-1:f[i][j])<<(j==m?"":" ");
if(i<n)cout<<endl;
}
}
Wannafly Camp 2020 Day 6I 你吓到我的马了.jpg - BFS的更多相关文章
- Wannafly Winter Camp 2020 Day 6I 变大! - dp
给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...
- Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...
- Wannafly Camp 2020 Day 3D 求和 - 莫比乌斯反演,整除分块,STL,杜教筛
杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\fra ...
- Wannafly Camp 2020 Day 2B 萨博的方程式 - 数位dp
给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 ...
- Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...
- Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- Wannafly Camp 2020 Day 2J 邦邦的2-SAT模板
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; cout<<n& ...
随机推荐
- C#制作Wincc组件进行配方管理
1,安装WinccV7.4并破解: 安装WinccV7.4SP1. 安装授权文件---根据提示 安装免狗驱动,根据提示 安装SImatic.net v13. 2,连接PLC, 首先在同一个局域网里面, ...
- Android布局管理器-从实例入手学习相对布局管理器的使用
场景 AndroidStudio跑起来第一个App时新手遇到的那些坑: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103797 ...
- linux 基础入门(9) 系统服务 systemctl 与 xinted的运用
9.系统服务 9.1系统服务 可以把计算机理解为一个地点比如中关村大街系统服务理解为中关村大街的理发店.饭店.商场等等,每一个都是一个系统服务,为客户提供不同内容的服务 服务:常驻在内存中的程序,且可 ...
- TensorFlow安装-(Ubuntu18.04.3 & Anaconda3)
1.背景 使用ubuntu18.04.3安装Anaconda3之后使用网上教程安装tensorflow失败,踩了多个坑,特此总结经验 附官方教程:https://tensorflow.google.c ...
- vuex的state在组件选项data和computed上引用的区别
引用在vue组件的data选项,不因数值被改变而更新引在在vue组件的computed选项,因数值变化而更组件 案例代码如下,调整下引用vue和vuex地址即可展示 <!DOCTYPE html ...
- Python 类 初学者笔记
面对象编程:编写表现世界中的事物和景象的类,并基于这些类创建对象,被创建的对象称为实例化. 创建类 class Dog(): #Python中类名称中的首字母要大写 def __init__(self ...
- Vue中富文本编辑器(vue-quill-editor)的使用
1. 安装 npm install vue-quill-editor --save 2. 导入并挂载 import VueQuillEditor from 'vue-quill-editor' // ...
- 阿里云搭建k8s高可用集群(1.17.3)
首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...
- 一维数组、二维数组——Java
一. 一维数组 1. 数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...
- Python 测试代码 初学者笔记
单元测试 每完成一个单元测试,Python都会打印一个字符: 测试通过打印一个句点:测试引发错误打印E:测试导致断言失败打印F 模块unittest import unittest from name ...