链接:https://ac.nowcoder.com/acm/contest/330/C
来源:牛客网

精通程序设计的 Applese 双写了一个游戏。

在这个游戏中,它被困在了一个 n×m迷宫

在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时候才可以通过;有一些方格是岩浆,只有当 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 走迷宫的更多相关文章

  1. 牛客寒假算法基础集训营4 B applese 走方格

    链接:https://ac.nowcoder.com/acm/contest/330/B 构造题,但是有两个特判... 1  2 2  1 然后就水了,血亏 #include<stdio.h&g ...

  2. 牛客寒假算法基础集训营4 I Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串. ...

  3. 牛客寒假算法基础集训营4 F Applese 的大奖

    链接:https://ac.nowcoder.com/acm/contest/330/H来源:牛客网 Applese 和它的小伙伴参加了一个促销的抽奖活动,活动的规则如下:有一个随机数生成器,能等概率 ...

  4. 牛客寒假算法基础集训营4 F Applese 的QQ群

    链接:https://ac.nowcoder.com/acm/contest/330/F来源:牛客网 Applese 有一个QQ群.在这个群中,大家互相请教问题.如 b 向 a 请教过问题,就把 a ...

  5. 牛客寒假算法基础集训营4 G Applese 的毒气炸弹

    链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很无聊,于是 ...

  6. 牛客寒假算法基础集训营4 E applese 涂颜色

    链接:https://ac.nowcoder.com/acm/contest/330/E 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现在它要为这个方 ...

  7. 2020牛客寒假算法基础集训营2 J题可以回顾回顾

    2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...

  8. 2020牛客寒假算法基础集训营1 J题可以回顾回顾

    2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...

  9. Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)

    链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 Applese 的毒气炸弹 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...

随机推荐

  1. 开发环境入门 linux基础 (部分)nginx和nfs

    nginx和nfs 复习总结 rpm -ivh 软件包 --nodeps (没有依赖性安装) rpm -ivh 软件包 --force (覆盖安装) yum -y upgrade 升级所有包,不改变软 ...

  2. PD中设置外键约束名称生成规则

    选择Database—>Edit Current DBMS选择Scripts->Objects->Reference->ConstName可以发现右侧的Value为: FK_% ...

  3. 问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

    ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创 ...

  4. centos 端口iptables配置

    1.安装iptables yum install iptables* -y 2.打开端口 iptables -I INPUT -p tcp --dport -j ACCEPT 3.查看本机关于IPTA ...

  5. Angular01 利用grunt搭建自动web前端开发环境、利用angular-cli搭建web前端项目

    搭建angular开发环境 一.下载并安装node 官网地址:点击前往 二.利用npm安装cnpm 安装好node后就可以使用npm命令啦 查看版本:npm -v 安装cnpm:npm install ...

  6. Selenium二次封装-Java版本

    package com.yanfuchang.selenium.utils; import java.awt.AWTException; import java.awt.Robot; import j ...

  7. DB2--值为null则赋默认值

    数据库sql操作经常会做一些null值的处理.如果一个字段的值为null,我们希望查询出的结果默认设为0或空,则使用函数 COALESCE(column,0)  ,0的位置可以替换为其他值,可以是'' ...

  8. R: 自动计算代码运行时间

    ################################################### 问题:代码运行时间   18.4.25 怎么计算代码的运行时间? 解决方案: ptm = pro ...

  9. php 函数追踪扩展 phptrace

    php 函数追踪扩展 phptrace 介绍 phptrace 是一个低开销的用于跟踪.分析 php 运行情况的工具. 它可以跟踪 php 在运行时的函数调用.请求信息.执行流程.并且提供有过滤器.统 ...

  10. 解决PendingIntent传递参数为空的问题

    PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,  0); 在接收端,接收的数据一直为null,在google ...