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& ...
随机推荐
- Centos 7 使用(Service iptables stop/start)关闭/打开防火墙 Failed to stop iptables.service: Unit iptables.service not loaded.
背景: 测试部署NetCore 项目到linux 系统时,窗口显示项目部署成功:但是本机无法访问(linux 在虚拟机上[ centos 7.6] ); 如下图↓ 能够相互ping 通,(Xshe ...
- 内网学习之Kerberos协议
学习了解kerberos协议,有助于我们后期理解黄金票据和白银票据的原理 kerberos协议 kerberos是一种由麻省理工大学提出的一种网络身份验证协议.旨在通过使用密钥加密技术为客户端/服务器 ...
- powersploit的两个信息收集的脚本
0x00 简介 powersploit是基于powershell的渗透工具包,里面都是powershell的脚本工具文件.工具包地址:https://github.com/PowerShellMafi ...
- mysql官方源安装的一些问题
今天测试Linux 各个软件源 ,发现mysql 配置官方源之后,yum install -y mysql 安装了 mysql lastst 最新版, 安装完之后,奇葩的是没有提示输入密码, 所 ...
- linux | 一次网卡故障处理
问题 在centos7系统中,设置ifcfg-eth*文件时,总会纠结NAME和DEVICE到底写哪个或哪个真实生效.这里实例演示下 这是网卡ifcfg-eth4配置文件.没写DEVICE,用的NAM ...
- 堆优化 dijkstra 简介
dijkstra 前言 原本我真的不会什么 dijkstra 只用那已死的 spfa ,还有各种玄学优化,可是,我不能相信一个已死的算法,就像我不能相信自己. ps : 虽然他已经活了 序 我站在镜子 ...
- .NET知识梳理——6.lambda
1. lambda 1.1 匿名方法lambda表达式 Lambda表达式 Lambda是一个匿名方法,实例化委托的一个参数,编译的时候会产生一个密封类,同时增加一个方法. Lambda ...
- NoSQLBooster如何MongoDB的部分文档从一个集合拷贝到另外一个集合中
假设MongoDB数据库中存有collection_A和collection_B两个集合,如下图所示: (一)先从集合collection_A中拷贝选择的文档 打开collection_A,看到目前有 ...
- linux版本的jdk1.8+hadoop2.9.2下载地址
hadoop: 链接:https://pan.baidu.com/s/14AhhPYP8933tn-EfSX-i8Q 提取码:e90m jdk1.8: 链接:https://pan.baidu.com ...
- get请求与post请求中文乱码问题的解决办法
首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解 ...