2018年长沙理工大学第十三届程序设计竞赛 G 题:逃离迷宫
题目链接: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 题:逃离迷宫的更多相关文章
- 2018年长沙理工大学第十三届程序设计竞赛 G 逃离迷宫 【BFS】
链接:https://www.nowcoder.com/acm/contest/96/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- H-数学考试 想法题+最新头文件 2018年长沙理工大学第十三届程序设计竞赛
https://www.nowcoder.com/acm/contest/96/H 坑点:INF开太小了... #define _CRT_SECURE_NO_WARNINGS #include< ...
- 2018年长沙理工大学第十三届程序设计竞赛 E小木乃伊到我家(spfa模版)
链接:https://www.nowcoder.com/acm/contest/96/E来源:牛客网 小木乃伊到我家 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
- 2018年长沙理工大学第十三届程序设计竞赛 J杯子
链接:https://www.nowcoder.com/acm/contest/96/J来源:牛客网 杯子 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言655 ...
- 2018年长沙理工大学第十三届程序设计竞赛 H数学考试
链接:https://www.nowcoder.com/acm/contest/96/H来源:牛客网 数学考试 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- 2018年长沙理工大学第十三届程序设计竞赛 Dzzq的离散数学教室1
Dzzq的离散数学教室1 链接:https://www.nowcoder.com/acm/contest/96/D来源:牛客网 zzq的离散数学教室1 时间限制:C/C++ 1秒,其他语言2秒 空间限 ...
- 2018年长沙理工大学第十三届程序设计竞赛 C 取手机 【概率】
链接:https://www.nowcoder.com/acm/contest/96/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2018年长沙理工大学第十三届程序设计竞赛 E 小木乃伊到我家 【最短路】
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 AA的欧尼酱qwb是个考古学家,有一天qwb发 ...
- 2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数
连续区间的最大公约数 思路:参照BZOJ 4488: [Jsoi2015]最大公约数脑补出的一个\(map\)套\(vector\)的写法,写起来比线段树短,运行时间比线段树快. 代码: #pragm ...
- 江西财经大学第一届程序设计竞赛 G题 小Q的口袋校园
链接:https://www.nowcoder.com/acm/contest/115/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
随机推荐
- Hadoop核心概念
大数据开发总体架构: Hadoop是大数据开发所使用的一个核心框架.使用Hadoop可以方便的管理分布式集群,将海量数据分布式的存储在集群中,并使用分布式并行程序来处理这些数据. Hadoop由许多子 ...
- POWERBI_1分钟学会_连续上升或下降指标监控
一:数据源 模拟数据为三款奶茶销量的日销售数据源,日期是23.8.24-23.8.31.A产品为连续7天,日环比下降,B产品为连续3天,日环比下降,C产品为连续2天,日环比下降. 二:建立基础度量值 ...
- 整理php防注入和XSS攻击通用过滤
对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlsp ...
- Linux系列教程——Linux文件编辑、Linux用户管理
@ 目录 1 Linux基本权限 1.权限基本概述 1.什么是权限? 2.为什么要有权限? 3.权限与用户之间的关系? 4.权限中的rwx分别代表什么含义? 2.权限设置示例 1.为什么要设定权限,我 ...
- Rethinking Point Cloud Registration as Masking and Reconstruction论文阅读
Rethinking Point Cloud Registration as Masking and Reconstruction 2023 ICCV *Guangyan Chen, Meiling ...
- 浅谈关于LCA
prologue 本身只会 tarjan 和 倍增法求LCA 的,但在发现有一种神奇的\(O(1)\) 查询 lca 的方法,时间优化很明显. main body 倍增法 先讨论倍增法,倍增法求 lc ...
- Aoba's GitLab Doki Theme - 一个简单的 GitLab 主题工具
前言 平常工作在用 GitLab 但总觉得缺点什么颜色好单调,于是随手摸了一个主题工具 界面预览 GitLab 主页效果 个人偏好配置页面 安装方法 安装 Tampermonkey 之类的用户脚本工具 ...
- 你也许不再需要使用 CSS Media Queries(媒体查询)了
你也许不再需要使用 CSS Media Queries(媒体查询)了 最近,CSS 引入了一项新功能:Container Queries.它可以替代 Media Queries 并实现 Media Q ...
- [最优化DP]决策单调性
决策单调性的概念&证明工具: 决策单调性,是在最优化dp中的可能出现的一种性质,利用它我们可以降低转移的复杂度. 首先dp中会有转移,每个状态都由若干个状态转移而来,最优化dp比较特殊,只能由 ...
- Unity csc.rsp文件
试验版本 Unity2020.3 编译符号,就是#if UNITY_ANDROID这个东西,在处理多平台多分支的情况下挺有用的,但是在ProjectSettings里面设置比较麻烦,不主动代码调用保存 ...