链接:https://www.nowcoder.com/acm/contest/96/G
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给你一个n*m的图,地图上'.'代表可以走的地方,而'#'代表陷阱不能走,
'P'代表人物位置,'K'代表钥匙,'E'代表出口。人物一个,钥匙有多个,
('K'的数量<=50)),出口一个,每个位置可以向(上,下,左,右)四个
方向走一格,花费一个单位时间,现在你需要花费最少的时间拿到钥匙
然后从迷宫的出口出去(若没有钥匙,则不能进入迷宫出口所在的格子)。

输入描述:

第一行一个整数T(T <= 50),代表数据的组数接下来一行n,m(n<=500,m<=500),代表地图的行和列接下来n行,每行一个长度为m的字符串,组成一个图。

输出描述:

如果可以出去,输出所花费的最少时间。如果不能出去,输出一行"No solution"。
示例1

输入

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-逃离迷宫相关推荐

  1. 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫

    题目链接 题目描述: 给你一个n*m的图,地图上'.'代表可以走的地方,而'#'代表陷阱不能走, 'P'代表人物位置,'K'代表钥匙,'E'代表出口.人物一个,钥匙有多个, ('K'的数量<=5 ...

  2. 2018年长沙理工大学第十三届程序设计竞赛题解

    链接:https://www.nowcoder.com/acm/contest/96/A 来源:牛客网 "LL是什么?这都不知道的话,别说自己是程序猿啊!"   "lon ...

  3. 2018年长沙理工大学第十三届程序设计竞赛 D-zzq的离散数学

    链接: https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是 ...

  4. 2018年长沙理工大学第十三届程序设计竞赛 Dzzq的离散数学教室1

    Dzzq的离散数学教室1 链接:https://www.nowcoder.com/acm/contest/96/D 来源:牛客网 zzq的离散数学教室1 时间限制:C/C++ 1秒,其他语言2秒 空间 ...

  5. 牛客网 2018年长沙理工大学第十三届程序设计竞赛 K zzq的离散数学教室2[网络流]

    题意:给一个有向无环图,求最大的点集,x不能到y,且y不能到x. 题解:首先可以知道的是这个是偏序集最大独立集,通过Dilworth定理可以知道是要求最小链划分(最小可交路径覆盖),我们通过网络流优化 ...

  6. 2018年长沙理工大学第十三届程序设计竞赛

    链接:https://www.nowcoder.com/acm/contest/96#question 持续更新ing,请多多关注~ A.LL 题目描述: "LL是什么?这都不知道的话,别说 ...

  7. 2018年长沙理工大学第十三届程序设计竞赛 - zzq的离散数学教室1

    题目链接 zzq的离散数学教室1 题意 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是一些正整数在偏序关系"整除"下的哈斯图的边数.用大白话讲 ...

  8. 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 离散数学中有种名叫"哈斯图" ...

  9. 2018年长沙理工大学第十三届程序设计竞赛 D zzq的离散数学教室1

    题目描述 离散数学中有种名叫"哈斯图"的东西. 在这题中,你们需要计算的是一些正整数在偏序关系"整除"下的哈斯图的边数.用大白话讲,在偏序关系"整除& ...

最新文章

  1. Linux系统中创建虚拟环境详解
  2. listview的divider边距
  3. cnetos7 vncserver安装与配置
  4. linux can 接收多帧_CAN编程介绍
  5. C语言实现hash/DJB2算法(附完整源码)
  6. 评论表聚集索引引起的评论超时问题
  7. Python编程,日志聚合工具,开源经济学,Prometheus监控,Kubernetes等
  8. python write函数换行_python中文件的知识点总结
  9. python历史5分钟数据_python每5分钟从kafka中提取数据的例子
  10. python中的fun_Python fun中*args,**kwargs参数的含义和用法(*args,**kwargs),Pythonfunargskwargs,及...
  11. Unreadable Notebook NotJSONError('Notebook does not appear to be JSON: u\'{\\n
  12. NET Framework 4 与.NET Framework 4 Client Profile有什么区别?
  13. 怎么用命令提示符打开浏览器_从您当前的命令提示符/终端目录打开文件浏览器...
  14. Linux下C++ libtorrent库使用
  15. 关于gopher协议
  16. jQuery第5章上机练习3(使用jQuery变换网页效果)
  17. EasyNVR网页Chrome无插件播放摄像机视频功能二次开发之云台控制接口示例代码
  18. 搞不定Eclipse TPTP
  19. 安装python包的时候文件夹权限报错:InvalidArchiveError(“Error with archive D:\\anaconda\\pkgs\\cudnn-8.4.1.50-h)
  20. 用Excel绘制统计图的方法

热门文章

  1. 通过解决“构造包含所有给定子串的最短字符串”问题思考算法优化
  2. Html/CSS博文目录
  3. 深入浅出Service插件化原理
  4. 判断接收的数据中是否有中文
  5. 翻身的废鱼——论PHP从入门到放弃需要多久?15
  6. 给Linux系统/网络管理员的nmap的29个实用例子
  7. 线程执行者(十一)执行者分离任务的启动和结果的处理
  8. centos --- phpunit 安装过程
  9. webview页面和壳通信的库(精简版)
  10. CreateEvent的使用方法