牛客寒假算法基础集训营4 C Applese 走迷宫
链接:https://ac.nowcoder.com/acm/contest/330/C
来源:牛客网
精通程序设计的 Applese 双写了一个游戏。
在这个游戏中,它被困在了一个 n×m迷宫
在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时候才可以通过;有一些方格是岩浆,只有当 Applese 是火属性的时候可以通过;有一些方格是墙壁,无论如何都无法通过;另一些格子是空地(包括起点和终点),可以自由通过
已知 Applese 在一个单位的时间内可以朝四个方向行走一格,且开始处于水属性,位于空地的道具拾取后只能在该处立即使用(或者不使用),且可以多次使用。求它走出迷宫需要的最少时间
开三维数组,vis[x][y][0/1] 然后模拟即可
有一点不是太明白,判断条件有个vis未被访问,也就是一个点最多过两次????
#include<bits/stdc++.h>
using namespace std;
int n,m;
typedef pair<pair<int,int>, int> Node;
const int maxn=;
char g[maxn][maxn];
int vis[maxn][maxn][];
int des[][]={-,,,-,,,,}; int bfs(pair<int,int> S,pair<int,int> T) {
memset(vis,-,sizeof(vis));
queue<Node> q;
q.push({S,});
vis[S.first][S.second][]=;
while(!q.empty()) {
Node tmp=q.front();
q.pop();
int x=tmp.first.first,y=tmp.first.second;
bool p=tmp.second;
for(int i=;i<;i++) {
int nx=x+des[i][];
int ny=y+des[i][];
if(nx<||nx>=n||ny<||ny>=m) continue;
if(~vis[nx][ny][p]) continue;
if(g[nx][ny]=='#') continue;
if(p&&g[nx][ny]=='~') continue;
if(!p&&g[nx][ny]=='w') continue;
vis[nx][ny][p]=vis[x][y][p]+;
pair<int,int> nxt={nx,ny};
if(nxt==T) return vis[nx][ny][p];
q.push({nxt,p});
}
if(g[x][y]=='@'&&vis[x][y][p^]==-) {
vis[x][y][p^]=vis[x][y][p]+;
q.push({tmp.first,p^});
}
}
return -;
} int main() {
pair<int,int> S,T;
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) scanf("%s",g[i]);
for(int i=;i<n;i++) {
for(int j=;j<m;j++) {
if(g[i][j]=='S') {
S={i,j};
}
else if(g[i][j]=='T') {
T={i,j};
}
}
}
int ans=bfs(S,T);
printf("%d\n",ans);
return ;
}
牛客寒假算法基础集训营4 C Applese 走迷宫的更多相关文章
- 牛客寒假算法基础集训营4 B applese 走方格
链接:https://ac.nowcoder.com/acm/contest/330/B 构造题,但是有两个特判... 1 2 2 1 然后就水了,血亏 #include<stdio.h&g ...
- 牛客寒假算法基础集训营4 I Applese 的回文串
链接:https://ac.nowcoder.com/acm/contest/330/I来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串. ...
- 牛客寒假算法基础集训营4 F Applese 的大奖
链接:https://ac.nowcoder.com/acm/contest/330/H来源:牛客网 Applese 和它的小伙伴参加了一个促销的抽奖活动,活动的规则如下:有一个随机数生成器,能等概率 ...
- 牛客寒假算法基础集训营4 F Applese 的QQ群
链接:https://ac.nowcoder.com/acm/contest/330/F来源:牛客网 Applese 有一个QQ群.在这个群中,大家互相请教问题.如 b 向 a 请教过问题,就把 a ...
- 牛客寒假算法基础集训营4 G Applese 的毒气炸弹
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很无聊,于是 ...
- 牛客寒假算法基础集训营4 E applese 涂颜色
链接:https://ac.nowcoder.com/acm/contest/330/E 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现在它要为这个方 ...
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 Applese 的毒气炸弹 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...
随机推荐
- C Primer Plus学习笔记(八)- 函数
函数简介 函数(function)是完成特定任务的独立程序代码单元 使用函数可以省去编写重复代码的苦差,函数能让程序更加模块化,提高程序代码的可读性,更方便后期修改.完善 #include <s ...
- PL/SQL批处理语句(二)FORALL
PL/SQL批处理语句(二)FORALL 我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换, ...
- 读书笔记<深入理解JVM>01 关于OutOfMemoryError 堆空间的溢出
代码片段如下: package com.gosaint.shiro; import java.util.ArrayList; import java.util.List; public class H ...
- git 本地代码到github(转)
git 本地代码到github 一·什么是gitHub? 官网解释:gitHub是一个让无论处于何地的代码工作者能工作于同一个项目,同一个版本的平台.(GitHub is a code hosti ...
- ROS Learning-007 beginner_Tutorials ROS节点
ROS Indigo beginner_Tutorials-06 ROS节点 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...
- pthread多线程编程
http://blog.csdn.net/onlyou930/article/details/6755593 http://blog.csdn.net/ithomer/article/details/ ...
- java中方法的控制修饰符也分为:可访问控制符和非访问控制符两类。
3 .方法的控制修饰符也分为:可访问控制符和非访问控制符两类. 可访问控制符有 4 种:公共访问控制符: public :私有访问控制符: private :保护访问控制符: protected :私 ...
- 移动应用中的AR开发,5款最受欢迎工具推荐!
英文原文:Top 5 Tools for Augmented Reality in Mobile Apps 还记得前段时间在网上很火的 3D 小熊不?托它的福,为相当一部分人科普了增强现实(AR) ...
- Entity Framework Tutorial Basics(37):Lazy Loading
Lazy Loading: One of the important functions of Entity Framework is lazy loading. Lazy loading means ...
- 按位操作符(Bitwise operators)
按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...