牛客 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
链接:https://www.nowcoder.com/acm/contest/96/G
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
'P'代表人物位置,'K'代表钥匙,'E'代表出口。人物一个,钥匙有多个,
('K'的数量<=50)),出口一个,每个位置可以向(上,下,左,右)四个
方向走一格,花费一个单位时间,现在你需要花费最少的时间拿到钥匙
然后从迷宫的出口出去(若没有钥匙,则不能进入迷宫出口所在的格子)。
输入描述:
第一行一个整数T(T <= 50),代表数据的组数接下来一行n,m(n<=500,m<=500),代表地图的行和列接下来n行,每行一个长度为m的字符串,组成一个图。
输出描述:
如果可以出去,输出所花费的最少时间。如果不能出去,输出一行"No solution"。
输入
3 5 5 ....P ##..E K#... ##... ..... 5 5 P.... ..... ..E.. ..... ....K 5 5 P#..E .#.#. .#.#. .#.#. ...#K
输出
No solution 12 No solution 分析:BFS.从起点P搜到终点E,再开一个数组vis[i][j][t],vis[i][j][0]表示从起点到点(i,j)未经过是'K'的点()即未拿到钥匙,vis[i][j][1]表示拿到钥匙,然后BFS即可。
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int N,M; char map[503][503]; int vis[502][502][2]; int d[4][2]={0,1,0,-1,1,0,-1,0}; struct Node{int x,y;int f; }; int bfs(int x,int y) {memset(vis,-1,sizeof(vis));queue<Node> q;Node p;p.x=x,p.y=y,p.f=0;vis[x][y][p.f]=0;q.push(p);while(!q.empty()){p=q.front();q.pop();if(map[p.x][p.y]=='E'&&p.f) return vis[p.x][p.y][1];for(int i=0;i<4;i++){int tx=p.x+d[i][0],ty=p.y+d[i][1];if(tx>=0&&tx<N&&ty>=0&&ty<M&&map[tx][ty]!='#'){Node temp;if(map[tx][ty]=='K') temp.f=1;else temp.f=p.f;if(vis[tx][ty][temp.f]!=-1) continue;if(map[tx][ty]=='E'&&temp.f==0) continue;temp.x=tx,temp.y=ty;vis[tx][ty][temp.f]=vis[p.x][p.y][p.f]+1;q.push(temp);}}}return -1; }int main() {int T;scanf("%d",&T);while(T--){scanf("%d%d",&N,&M);for(int i=0;i<N;i++) scanf("%s",map[i]);int ans;for(int i=0;i<N;i++)for(int j=0;j<M;j++)if(map[i][j]=='P'){ans=bfs(i,j);break;}if(ans>0) printf("%d\n",ans);else printf("No solution\n");}return 0; }
View Code
转载于:https://www.cnblogs.com/ACRykl/p/8834041.html
牛客 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫相关推荐
- 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
题目链接 题目描述: 给你一个n*m的图,地图上'.'代表可以走的地方,而'#'代表陷阱不能走, 'P'代表人物位置,'K'代表钥匙,'E'代表出口.人物一个,钥匙有多个, ('K'的数量<=5 ...
- 2018年长沙理工大学第十三届程序设计竞赛题解
链接:https://www.nowcoder.com/acm/contest/96/A 来源:牛客网 "LL是什么?这都不知道的话,别说自己是程序猿啊!" "lon ...
- 2018年长沙理工大学第十三届程序设计竞赛 D-zzq的离散数学
链接: https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是 ...
- 2018年长沙理工大学第十三届程序设计竞赛 Dzzq的离散数学教室1
Dzzq的离散数学教室1 链接:https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 zzq的离散数学教室1 时间限制:C/C++ 1秒,其他语言2秒 空间 ...
- 牛客网 2018年长沙理工大学第十三届程序设计竞赛 K zzq的离散数学教室2[网络流]
题意:给一个有向无环图,求最大的点集,x不能到y,且y不能到x. 题解:首先可以知道的是这个是偏序集最大独立集,通过Dilworth定理可以知道是要求最小链划分(最小可交路径覆盖),我们通过网络流优化 ...
- 2018年长沙理工大学第十三届程序设计竞赛
链接:https://www.nowcoder.com/acm/contest/96#question 持续更新ing,请多多关注~ A.LL 题目描述: "LL是什么?这都不知道的话,别说 ...
- 2018年长沙理工大学第十三届程序设计竞赛 - zzq的离散数学教室1
题目链接 zzq的离散数学教室1 题意 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是一些正整数在偏序关系"整除"下的哈斯图的边数.用大白话讲 ...
- 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 离散数学中有种名叫"哈斯图" ...
- 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1
题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是一些正整数在偏序关系"整除"下的哈斯图的边数.用大白话讲,在偏序关系"整除& ...
最新文章
- Linux系统中创建虚拟环境详解
- listview的divider边距
- cnetos7 vncserver安装与配置
- linux can 接收多帧_CAN编程介绍
- C语言实现hash/DJB2算法(附完整源码)
- 评论表聚集索引引起的评论超时问题
- Python编程,日志聚合工具,开源经济学,Prometheus监控,Kubernetes等
- python write函数换行_python中文件的知识点总结
- python历史5分钟数据_python每5分钟从kafka中提取数据的例子
- python中的fun_Python fun中*args,**kwargs参数的含义和用法(*args,**kwargs),Pythonfunargskwargs,及...
- Unreadable Notebook NotJSONError('Notebook does not appear to be JSON: u\'{\\n
- NET Framework 4 与.NET Framework 4 Client Profile有什么区别?
- 怎么用命令提示符打开浏览器_从您当前的命令提示符/终端目录打开文件浏览器...
- Linux下C++ libtorrent库使用
- 关于gopher协议
- jQuery第5章上机练习3(使用jQuery变换网页效果)
- EasyNVR网页Chrome无插件播放摄像机视频功能二次开发之云台控制接口示例代码
- 搞不定Eclipse TPTP
- 安装python包的时候文件夹权限报错:InvalidArchiveError(“Error with archive D:\\anaconda\\pkgs\\cudnn-8.4.1.50-h)
- 用Excel绘制统计图的方法