牛客寒假算法基础集训营4 C Applese 走迷宫
2024-09-07 04:01:58
链接: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 ;
}
最新文章
- Python—变量
- 彻底弄明白之java多线程中的volatile
- C#/.net七牛云存储上传图片(文件)操作
- 小红帽5.9 配置静态IP上网问题
- 学习java窗口基本操作时无聊写的
- Java经典编程题50道之九
- 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
- 自动化测试 Appium之Python运行环境搭建 Part1
- FlowerVisor理解
- WebMvcConfigurer
- LNMP V1.4一键快速部署Let&#39;s Encrypt免费SSL证书
- 自制进度条在python3下PyCharm中运行或在控制台按照目录运行
- 记Asp.Net Core Swagger 使用 并带域接口处理
- Null和undefined的区别?
- hibernate级联 cascade属性(转)
- Jupyter和IPython
- CSS 实例之文字的凸起与凹陷
- glut glew区别
- OTL翻译(7) -- otl_exception类
- MySQL常用shell语句
热门文章
- 2016.6.18主窗体、子窗体InitializeComponent()事件、Load事件发生顺序以及SeleChanged事件的发生
- centos软件安装目录(amp目录)
- 使用SQL Server保存Session状态,实现单点登录
- hbase性能调优(转载)
- Eclipse中如何开启断言(Assert),方法有二
- Django的Model使用
- [hdu1251]统计难题(trie模板题)
- php apc 安装
- java中什么是代码点,什么是代码单元?
- Luogu 3521 [POI2011]ROT-Tree Rotations