题目链接:https://www.nowcoder.com/acm/contest/96/G

思路:两遍bfs,找到p到k的情况,记录时间;找到E到k的情况,记录时间。题目超时点在于输入需要用scanf。如果不用scanf可以用cin加速挂。

AC代码:

  1 #include<iostream>
2 #include<bits/stdc++.h>
3 #include<queue>
4 #define INF 10000000
5 using namespace std;
6 int vis[505][505];
7 int ans[505][505];
8 char a[505][505];
9 int fx[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
10 struct Node{
11 int x,y,step;
12 };
13 void bfs(int x,int y){
14 queue < Node > q;
15 Node now,nxt;
16 now.x=x;
17 now.y=y;
18 now.step=0;
19 q.push(now);
20 vis[x][y]=1;
21 while(!q.empty()){
22 now=q.front();
23 q.pop();
24 if(a[now.x][now.y]=='K'){
25 ans[now.x][now.y]=now.step;
26 }
27 for(int i=0;i<4;i++){
28 int tmpx=now.x+fx[i][0];
29 int tmpy=now.y+fx[i][1];
30 if(!vis[tmpx][tmpy]&&a[tmpx][tmpy]!='#'){
31 nxt.x=tmpx;
32 nxt.y=tmpy;
33 vis[nxt.x][nxt.y]=1;
34 nxt.step=now.step+1;
35 q.push(nxt);
36 }
37 }
38 }
39 return ;
40 }
41 int BFS(int x,int y){
42 queue < Node > q;
43 int mini=INF;
44 Node now,nxt;
45 now.x=x;
46 now.y=y;
47 now.step=0;
48 q.push(now);
49 vis[x][y]=1;
50 while(!q.empty()){
51 now=q.front();
52 q.pop();
53 if(a[now.x][now.y]=='K'&&ans[now.x][now.y]){
54 mini=min(mini,ans[now.x][now.y]+now.step);
55 }
56 for(int i=0;i<4;i++){
57 int tmpx=now.x+fx[i][0];
58 int tmpy=now.y+fx[i][1];
59 if(!vis[tmpx][tmpy]&&a[tmpx][tmpy]!='E'&&a[tmpx][tmpy]!='#'){
60 nxt.x=tmpx;
61 nxt.y=tmpy;
62 nxt.step=now.step+1;
63 q.push(nxt);
64 vis[nxt.x][nxt.y]=1;
65 }
66 }
67 }
68 return mini;
69 }
70 int main(){
71 // ios::sync_with_stdio(false); 加速挂
72 int T;
73 cin>>T;
74 while(T--){
75 int n,m;
76 cin>>n>>m;
77 memset(ans,0,sizeof(ans));
78 for(int i=0;i<504;i++)
79 for(int j=0;j<504;j++)
80 a[i][j]='#';
81 for(int i=1;i<=n;i++){
82 char c=getchar();
83 for(int j=1;j<=m;j++){
84 scanf("%c",&a[i][j]);
85 }
86 }
87 for(int i=1;i<=n;i++){
88 for(int j=1;j<=m;j++){
89 if(a[i][j]=='E'){
90 memset(vis,0,sizeof(vis));
91 bfs(i,j);
92 break;
93 }
94 }
95 }
96 int mini;
97 for(int i=1;i<=n;i++){
98 for(int j=1;j<=m;j++){
99 if(a[i][j]=='P'){
100 memset(vis,0,sizeof(vis));
101 mini=BFS(i,j);
102 break;
103 }
104 }
105 }
106 if(mini==INF){
107 cout<<"No solution"<<endl;
108 }else{
109 cout<<mini<<endl;
110 }
111 }
112 return 0;
113 }

2018年长沙理工大学第十三届程序设计竞赛 G 题:逃离迷宫的更多相关文章

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

    链接:https://www.nowcoder.com/acm/contest/96/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  2. H-数学考试 想法题+最新头文件 2018年长沙理工大学第十三届程序设计竞赛

    https://www.nowcoder.com/acm/contest/96/H 坑点:INF开太小了... #define _CRT_SECURE_NO_WARNINGS #include< ...

  3. 2018年长沙理工大学第十三届程序设计竞赛 E小木乃伊到我家(spfa模版)

    链接:https://www.nowcoder.com/acm/contest/96/E来源:牛客网 小木乃伊到我家 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...

  4. 2018年长沙理工大学第十三届程序设计竞赛 J杯子

    链接:https://www.nowcoder.com/acm/contest/96/J来源:牛客网 杯子 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言655 ...

  5. 2018年长沙理工大学第十三届程序设计竞赛 H数学考试

    链接:https://www.nowcoder.com/acm/contest/96/H来源:牛客网 数学考试 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

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

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

  7. 2018年长沙理工大学第十三届程序设计竞赛 C 取手机 【概率】

    链接:https://www.nowcoder.com/acm/contest/96/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. 2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家 【最短路】

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 AA的欧尼酱qwb是个考古学家,有一天qwb发 ...

  9. 2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数

    连续区间的最大公约数 思路:参照BZOJ 4488: [Jsoi2015]最大公约数脑补出的一个\(map\)套\(vector\)的写法,写起来比线段树短,运行时间比线段树快. 代码: #pragm ...

  10. 江西财经大学第一届程序设计竞赛 G题 小Q的口袋校园

    链接:https://www.nowcoder.com/acm/contest/115/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

随机推荐

  1. Java开发面试--nacos专区

    1. Nacos是什么? 请简要介绍Nacos是什么以及它的主要功能和用途. 答: 简介: Nacos是一个开源的.高性能.动态服务发现.配置和服务管理平台,通常用于微服务架构中.Nacos的名称来源 ...

  2. Falcon-7B大型语言模型在心理健康对话数据集上使用QLoRA进行微调

      文本是参考文献[1]的中文翻译,主要讲解了Falcon-7B大型语言模型在心理健康对话数据集上使用QLoRA进行微调的过程.项目GitHub链接为https://github.com/iamaru ...

  3. Blazor Server 发起HttpPost请求,但是多参数

    一.介绍 今天突然想起之前工作上遇到的一个问题,在做Blazor 开发时后端给的一个接口请求方式是Post ,但是他需要携带多个参数,新建一个公共类又觉得麻烦,我就尝试着怎么在Post请求中携带多个参 ...

  4. Spring Boot RestController接口如何输出到终端

    背景 公司项目的批处理微服务,一般是在晚上固定时段通过定时任务执行,但为了预防执行失败,我们定义了对应的应急接口,必要时可以通过运维在终端中进行curl操作.然而,部分任务耗时较长,curl命令执行后 ...

  5. git Failed to connect to 127.0.0.1 port xxxx: Connection refused 的问题。

    问题描述在使用 git 拉取.提交代码的时候,会出现 git Failed to connect to 127.0.0.1 port xxxx: Connection refused 的问题. 原因: ...

  6. python setup.py sdist bdist_wheel

    # python setup.py sdist bdist_wheel# twine upload dist/*import ioimport osimport sysfrom shutil impo ...

  7. Arduino入门教程

        Arduino入门教程   Arduino是一款简单易学的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE).它通过各种各样的传感器来感知环境,再通过控制 ...

  8. Python+Softmax+MNIST

    # -*- coding: utf-8 -*- """ 用神经网络搭建的softmax线性分离器 Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的 ...

  9. vue打包部署遇到的问题

    网站上线中遇到的问题(跨域,404,空白页解决方案) 因为本人是后端开发工程师,对前端开发不了解,踩了很多坑,所以将踩过的坑分享出来,以供参考 网站地址:这里 这段时间将项目部署到服务器中引发了几个问 ...

  10. vue + tornado 个人博客项目简介

    vue + tornado 个人博客项目简介 项目链接:https://www.freepd.top 项目链接:https://admin.freepd.top 项目简介 首页预览 本站接入了百度ap ...