Bfs【p2385】 青铜莲花池
题目描述--->p2385 青铜莲花池
分析
很明显了,题目告诉我们有八个方向,当然优先考虑bfs!
很简单的bfs,重点在于考虑清楚8个方向.
自己刚开始打错了 emmm
给大家上一个图.↓
(假定m1为3,m2为2)

对应加减的就是我们的原来的坐标.
然后就完了 emmmm
感觉写的不算太丑
---------------------代码--------------------
#include<bits/stdc++.h>
#define IL inline
#define RI register int
IL void in(int &x)
{
int f=1;x=0;char s=getchar();
while(s>'9' or s<'0'){if(s=='-')f=-1;s=getchar();}
while(s>='0' and s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,m,a,b,sx,sy,tx,ty;
int res[33][33];
bool vis[33][33];
int ax[10],ay[10];
struct cod{int x,y,step;};
IL int bfs()
{
std::queue<cod>q;
q.push((cod){sx,sy,0});
vis[sx][sy]=true;
while(!q.empty())
{
int x=q.front().x,y=q.front().y,cnt=q.front().step;
if(x==tx and y==ty)return cnt;
q.pop();
for(RI i=1;i<=8;i++)
{
int nx=x+ax[i],ny=y+ay[i];
if(nx<1 or nx>n or ny<1 or ny>m )continue;
if(vis[nx][ny]==true or res[nx][ny]==0 or res[nx][ny]==2)continue;
if(nx==tx and ny==ty)return cnt+1;
q.push((cod){nx,ny,cnt+1});
vis[nx][ny]=true;
}
}
}
main(void)
{
in(n),in(m),in(a),in(b);
for(RI i=1;i<=n;i++)
for(RI j=1;j<=m;j++)
{
in(res[i][j]);
if(res[i][j]==3)sx=i,sy=j;
if(res[i][j]==4)tx=i,ty=j;
}
if(a!=b)
{
ax[1]=a,ay[1]=b;
ax[2]=a,ay[2]=-b;
ax[3]=-a,ay[3]=b;
ax[4]=-a,ay[4]=-b;
ax[5]=b,ay[5]=a;
ax[6]=b,ay[6]=-a;
ax[7]=-b,ay[7]=a;
ax[8]=-b,ay[8]=-a;
}
printf("%d",bfs());
}
Bfs【p2385】 青铜莲花池的更多相关文章
- bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
P1606 [USACO07FEB]白银莲花池Lilypad Pond 转化为最短路求解 放置莲花的方法如果直接算会有重复情况. 于是我们可以先预处理和已有莲花之间直接互相可达的点,将它们连边(对,忽 ...
- 【luogu P2385 青铜莲花池】 题解
题目链接:https://www.luogu.org/problemnew/show/P2385 莲花池什么的最漂亮啦! 最近刷了两天搜索= =我搜索一直是弱菜 直接套bfs #include < ...
- Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
感觉应当挺简单的,但是弄了好久……菜死了 如果不考虑那些为$1$的点,直接跑个最短路计数就好了,但是我们现在有一些边可以不用付出代价,那么只要在连边的时候先预处理搜一下就好了. 原来的想法是拆点,但是 ...
- P1606 [USACO07FEB]白银莲花池Lilypad Pond
这个题其实算是个最短路计数,建图的直观思想很简单,但是很显然有一个地方没法处理,就是有的时候通过两条路走到同一个地方的话方案数会计算两次.我们发现加上原有的莲花就很难处理,会计算重复.我们要想办法避免 ...
- D9 图论综合题
1.白银莲花池 LUOGU 2411 第一种思路:当然我们可以写三个bfs a掉这个题,这写下来一二百行要有了吧: 第二种:我们可以在一个bfs中维护所有的信息,一个方向数组,从起点开始,向八个方向扩 ...
- Bittersweet——NOIP2018 游记
p { font-size: 16px; line-height: 1.5em; } blockquote { font-family: 'Times New Roman', 楷体; text-ali ...
- NOIP模拟测试19
T1: 题目大意:将一颗有N个节点的树分割,使得每个联通块大小相等,问一共有多少方案.(N<=1000000) 首先,一条很显然的性质,每个联通块的大小一定是N的因子. 然后,我们可以对于每个因 ...
- angular二级联动菜单
<!doctype html> <html lang="en" ng-app='App'> <head> <meta charset=&q ...
- angular 实现自定义样式下拉菜单
自己闲着没事写了一个自定义的下拉菜单希望和大家交流一下!望能和大神们成为朋友. 下面上代码: <!doctype html> <html lang="en" ng ...
随机推荐
- JMeter获取复杂的JSON串中的参数的值
大家好,这篇博文中主要是介绍怎么用JMeter的BeanShell去获取复杂的JSON串中的某个参数的值,这将 便于我们用JMeter做出更完美的自动化测试: 首先有这样一个json串: { &quo ...
- python 3 使用cmp函数报错
python3 中已经不使用cmp函数进行比较大小,使用operator模块 import operator lt(a,b) 相当于 a<b 从第一个数字或字母(ASCII)比大小 le(a,b ...
- 一个画ROC曲线的封装包
Draw_ROC_Curves This is a python file which is used for drawing ROC curves -f : assign file name -t ...
- PAT——甲级1009:Product of Polynomials;乙级1041:考试座位号;乙级1004:成绩排名
题目 1009 Product of Polynomials (25 point(s)) This time, you are supposed to find A×B where A and B a ...
- PEAR DB 初学笔记
1.数据查询 i. DB_common::getAll() DB_FETCHMODE_ORDERED . DB_FETCHMODE_ASSOC . DB_FETCHMODE_OBJECT ii. DB ...
- STL之heap使用简介
STL中并没有把heap作为一种容器组件,heap的实现亦需要更低一层的容器组件(诸如list,array,vector)作为其底层机制.Heap是一个类属算法,包含在algorithm头文件中.虽然 ...
- win10&hyper上装Ubuntu出现没有找到dev fd0, sector 0 错误
win10 hyper装 ubuntu blk_update_request:I/O error,dev sr0,sector0 错误 配置好安装重启后出现 blk_update_request: I ...
- awk学习笔记
1. 数据格式 id1,n1 id2,n2 ... 要对每个id进行一个n的加和 cat file1 | awk -F"," '{if(n[$1]>0){n[$1]=n[$1 ...
- 16个简单实用的.htaccess技巧
.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能.. ...
- NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
springMVC 内嵌jetty时,出现了NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet: 添加了 ...