Pond Skater
题目
Snuke,水上平衡车,住在一个矩形池塘,可以看成 H 列 W 行,(i, j) 表示第 i 列第 j 行。池塘里长着荷叶,荷叶是不能进入的。如果 cij 是 @,表示荷叶。如果 cij 是 .,表示不是荷叶。
Snuke 每次可以向北、东、南、西的任意同一个方向移动1 ~ K 步,但是不能通过荷叶,同时也不能移动到池塘外。
给我们起点坐标 (x1, y1) 和终点坐标 (x2, y2),要求我们找到最小的移动次数。如果不能到达,输出 -1。
\(1 ≤ H,W,K ≤ 10^6\)
\(H × W ≤ 10^6\)
题目分析
对于数据分析,可以把矩阵转化为一条链,而链的长度不会超过\(1e6\),这样解决了矩阵的访问
考虑对整个问题BFS,对答案记忆化,实际上每一个格子都会被访问多次,但在BFS拓展时会有操作4*k次,于是需要对BFS剪枝
首先,如果超出边界便不用走完k步
如果当前到达的步数会大于目前格子的最小步数,说明,接下的步数,都可以用格子的最小步数+1所替换,怎样都比现在的优,所以可以break
如果当前到达的步数会等于目前格子的最小步数,那这一步就没有走的必要,但当前格子的步数可能为另一条路转移,所以k步要继续走
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
int n,m,k;
int mp[MAXN];
char s[MAXN];int sx,sy,tx,ty;
int get(int x,int y)
{
return (x-1)*m+y;
}
struct node{
int x,y;
int step;
};
int zfx[5]={0,0,1,-1};
int zfy[5]={1,-1,0,0};
int vis[MAXN];
int Bfs()
{
memset(vis,0x3f,sizeof(vis));
queue<node>q;
node nowx;
nowx.step=0;
nowx.x=sx;
nowx.y=sy;
vis[get(nowx.x,nowx.y)]=0;
q.push(nowx);
while(q.size())
{
node temp=q.front();
q.pop();
if(temp.x==tx&&temp.y==ty)
{
return temp.step;
}
for(int j=0;j<4;j++)
{
for(int i=1;i<=k;i++)
{
int nowxs=temp.x+i*zfx[j];
int nowys=temp.y+i*zfy[j];
if(nowxs>n||nowys>m||nowxs<1||nowys<1)
{
break;
}
if(mp[get(nowxs,nowys)])
{
break;
}
node now;
now.x=nowxs;
now.y=nowys;
now.step=temp.step+1;
if(now.step>vis[get(now.x,now.y)])
{
break;
}
if(now.step==vis[get(now.x,now.y)])
{
continue;
}
vis[get(now.x,now.y)]=now.step;
q.push(now);
}
}
}
return -1;
}
int main()
{
scanf("%d %d %d",&n,&m,&k);
scanf("%d %d %d %d",&sx,&sy,&tx,&ty);
for(int i=1;i<=n;i++)
{
scanf("%s",s+1);
for(int j=1;j<=m;j++)
{
if(s[j]=='@')
{
mp[get(i,j)]=1;
}
}
}
printf("%d",Bfs());
}
Pond Skater的更多相关文章
- AtCoder Beginner Contest 170
比赛链接:https://atcoder.jp/contests/abc170 A - Five Variables 题意 $5$ 个数中有 $1$ 个 $0$,判断是第几个. 代码 #include ...
- BZOJ 1632: [Usaco2007 Feb]Lilypad Pond
题目 1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 390 Solved: 109[ ...
- 1632: [Usaco2007 Feb]Lilypad Pond
1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 404 Solved: 118[Sub ...
- bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
P1606 [USACO07FEB]白银莲花池Lilypad Pond 转化为最短路求解 放置莲花的方法如果直接算会有重复情况. 于是我们可以先预处理和已有莲花之间直接互相可达的点,将它们连边(对,忽 ...
- [USACO07FEB] Lilypad Pond
https://www.luogu.org/problem/show?pid=1606 题目描述 FJ has installed a beautiful pond for his cows' aes ...
- 最短路【洛谷P1606】 [USACO07FEB]荷叶塘Lilypad Pond
P1606 [USACO07FEB]荷叶塘Lilypad Pond 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令 ...
- 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond 解题报告
P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...
- P1606 [USACO07FEB]荷叶塘Lilypad Pond(最短路计数)
P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...
- Gym - 101670B Pond Cascade(CTU Open Contest 2017 贪心,二分)
题目: The cascade of water slides has been installed in the park recently and it has to be tested. The ...
随机推荐
- Linux 双网卡绑定及Bridge
Linux 双网卡绑定及Bridge 阅读(5,202) 一:linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多. ...
- Mysql实例 表设计
目录 一.介绍 二.设计表格 三.查询 查都有哪些公司 查A公司都放了哪些广告 查A公司10月份该交多少广告费 四.分析 表结构设置 sql语句 其它功能 一.介绍 有一个公司叫月亮集团,他们旗下有很 ...
- 试工具_ab
目录 一.简介 二.例子 三.参数 一.简介 ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是基于URL的. 1.ab每次只能测试一个URL,适合做重复压力测 ...
- Apache Log4j 远程代码执行漏洞源码级分析
漏洞的前因后果 漏洞描述 漏洞评级 影响版本 安全建议 本地复现漏洞 本地打印 JVM 基础信息 本地获取服务器的打印信息 log4j 漏洞源码分析 扩展:JNDI 危害是什么? GitHub 项目 ...
- java多线程7:ReentrantReadWriteLock
真实的多线程业务开发中,最常用到的逻辑就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务), 这样做虽然保证了实例变量的线程安全性, ...
- 微信小程序项目使用npm安装vant-weapp的正确步骤,简单易懂!!
微信小程序项目使用npm安装vant-weapp的正确步骤 1.在当前小程序项目目录npm init -y 构建npm项目 2.运行命令 npm install vant-weapp -S --pro ...
- ciscn_2019_s_9
很简单的一道题 例行检查 没有开启nx保护,就想到了shellcode来做 很明显的栈溢出 唯一的要求就是shellcode长度不能超过0x24 通过jump跳转到shellcode的位置 完整exp ...
- ciscn_2019_c_1 1
步骤: 先checksec,看一下开启了什么保护 可以看到开启了nx保护,然后把程序放入ida里面,观察程序代码 先shift+f12观察是否有system和binsh函数 发现没有system和bi ...
- 项目管理的基本概念(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 关于项目管理的基本概念,我看了好久,也迷糊了好久--原谅我实在不是个善于理解概念的妖,最终我决定,就记些简单的东东吧,具体 ...
- 解决H5设置了line-height但并没有居中的问题
遇到的问题 明明设置了line-height = height,但在H5页面里文字并没有居中. 原因 因为line-height是两条基线之间的距离,当元素高度和font-size差距较大时,会出现不 ...