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 ... 
随机推荐
- tomcat运行solr
			https://blog.csdn.net/u010346953/article/details/67640036 
- Codeforces 1093G题解(线段树维护k维空间最大曼哈顿距离)
			题意是,给出n个k维空间下的点,然后q次操作,每次操作要么修改其中一个点的坐标,要么查询下标为[l,r]区间中所有点中两点的最大曼哈顿距离. 思路:参考blog:https://blog.csdn.n ... 
- Opencv4.0.0安装包
			这个资源是Opencv4.0.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载 
- Python——数据类型初步:Numbers
			本篇内容 今天主要简介了几种数字的数据类型和一些稍微比较常用的方法. • int • bytes • float • bool • complex • long Python里面的使用变量的时候并不需 ... 
- Spring 笔记(二)模块体系
			前言 在 Spring Boot 出现之前,开发一个 Spring 项目总会需要添加很多依赖.但是我们在配置依赖的时候,往往不太明确各依赖的具体作用,经常是从网上复制粘贴. 为何需要添加这些依赖?各依 ... 
- 使用IDEA新建Maven项目没有完整的项目结构(src文件夹等等)
			maven还没加载好,右下角还有进度条在从中央仓库读,所以在创建maven项目的时候,需要加archetypeCatalog=internal 右边新增一项 如下图: 此时就可以快速的建立maven项 ... 
- P3531 [POI2012]LIT-Letters
			题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ... 
- 洛谷 P2606 [ZJOI2010]排列计数  解题报告
			P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ... 
- code forces Codeforces Round #487 (Div. 2)  C
			C. A Mist of Florescence time limit per test 1 second memory limit per test 256 megabytes input stan ... 
- confluence6.3安装、破解
			confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实现团队成员之间的协作和知识共享.现在大多数公司都会部署一套confluence,用作内部wiki.现在co ... 
