把点抽出来 跑个最短路就好啦。

 #include<bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std; const int N=+;
const int M=1e5+;
const int inf=0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+; int n, m, q, idx, S, T, d[N * N], hs[N][N], dx[] = {, -, , }, dy[] = {, , , -};
char s[N][N]; vector<pii> edge[N * N]; int Dj(int S, int T) {
priority_queue<pii, vector<pii>, greater<pii> > que;
d[S] = ; que.push(mk(, S));
while(!que.empty()) {
pii u = que.top();
que.pop();
if(u.fi < d[u.se]) continue;
if(u.se == T) {
return u.fi;
}
for(pii v : edge[u.se]) {
if(d[u.se] + v.fi < d[v.se]) {
d[v.se] = d[u.se] + v.fi;
que.push(mk(d[v.se], v.se));
}
}
}
return -;
}
void init() {
idx = ;
for(int i = ; i <= n * n + ; i++)
edge[i].clear(), d[i] = inf;
} bool check(int x, int y) {
if(x > n || x < ) return false;
if(y > m || y < ) return false;
if(s[x][y] == '#') return false;
return true;
}
int main() {
while(scanf("%d%d%d", &n, &m, &q) != EOF) {
init();
for(int i = ; i <= n; i++)
scanf("%s", s[i] + );
for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
hs[i][j] = ++idx;
if(s[i][j] == 'S') S = idx;
if(s[i][j] == 'T') T = idx;
}
} for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
if(s[i][j] == '#') continue;
for(int k = ; k < ; k++) {
int nx_x = i + dx[k];
int nx_y = j + dy[k];
if(check(nx_x, nx_y)) {
edge[hs[i][j]].push_back(mk(, hs[nx_x][nx_y]));
}
}
}
} for(int i = ; i <= q; i++) {
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
a++, b++, c++, d++;
if(s[a][b] == '#' || s[c][d] == '#') continue;
edge[hs[a][b]].push_back(mk(, hs[c][d]));
} int ans = Dj(S, T);
printf("%d\n", ans);
}
return ;
}
/*
*/

2018年湘潭大学程序设计竞赛 F - maze的更多相关文章

  1. 牛客网-2018年湘潭大学程序设计竞赛-F

    题目链接:https://www.nowcoder.com/acm/contest/105/F 解题思路:这道题第一眼直接思路就是搜索,但想了半天没想到有什么好办法搜,然后就转成最短路写了, 因为多入 ...

  2. 2018年湘潭大学程序设计竞赛 maze(bfs)

    链接:https://www.nowcoder.com/acm/contest/105/F来源:牛客网 有q个单向传送阵,每个传送阵各有一个入口和一个出口,入口和出口都在迷宫的格子里,当走到或被传送到 ...

  3. 2018年湘潭大学程序设计竞赛G又见斐波那契

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

  4. 2018年湘潭大学程序设计竞赛G又见斐波那契(矩阵快速幂)

    题意 题目链接 Sol 直接矩阵快速幂 推出来的矩阵应该长这样 \begin{equation*}\begin{bmatrix}1&1&1&1&1&1\\1 & ...

  5. 2018年湘潭大学程序设计竞赛 Fibonacci进制

    Fibonacci数是非常有名的一个数列,它的公式为 f(n)=f(n-1)+f(n-2),f(0)=1,f(1)=2.  我们可以把任意一个数x表示成若干不相同的Fibonacci数的和, 比如说1 ...

  6. 2018年湘潭大学程序设计竞赛 H统计颜色

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

  7. 2018年湘潭大学程序设计竞赛 G- 又见斐波那契

    推一推矩阵直接快速幂. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> #defi ...

  8. 2018年湘潭大学程序设计竞赛 E 吃货

    题目描述 作为一个标准的吃货,mostshy又打算去联建商业街觅食了.混迹于商业街已久,mostshy已经知道了商业街的所有美食与其价格,而且他给每种美食都赋予了一个美味度,美味度越高表示他越喜爱这种 ...

  9. 2018中国大学生程序设计竞赛 - 网络选拔赛 1009 - Tree and Permutation 【dfs+树上两点距离和】

    Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

随机推荐

  1. java JNative调用DLL中带引用类型的方法

    DLL中的被调函数有两个参数,第二个参数是int64类型的引用类型,因此创建8byte的MemoryBlock: JNative n = null;  try {   n = new JNative( ...

  2. 【bzoj4516】 Sdoi2016—生成魔咒

    http://www.lydsy.com/JudgeOnline/problem.php?id=4516 (题目链接) 题意 依次向字符串末尾加上一个字符,每次求不同子串个数. Solution 如果 ...

  3. 解题:NOI 2009 诗人小G

    题面 今天考试考了,于是开始糊学决策单调性DP 这是一个完全不会优化DP的人 决策单调性DP的一种优化方法是用单调队列优化 存下{左端点l,右端点r,最优决策点p}的三元组,按照单调队列的通常操作来说 ...

  4. 解题:NOI 2014 随机数生成器

    题面 为什么NOI2014有模拟题=.=??? 按题意把序列生成出来之后,对每一行维护一个能取到的最左侧和能取到的最右侧.从小到大$O(n^2)$枚举数字看看能否填入,能填入则暴力$O(n)$更新信息 ...

  5. 本地如何连接虚拟机上的MySql

    今天在本地链接虚拟机上的MySql,然而链接失败了!甚是尴尬! 首先想一想是什么原因导致链接失败: 基础环境:在Linux上安装mysql 1.检查虚拟机IP在本地是否可以ping 通过 虚拟机IP: ...

  6. java基础基础总结----- Date

    前言:其实在学习这个的时候,自我感觉学到什么直接查询API就可以了,没有必要再去研究某个方法怎么使用, 重点学习一下经常用到的方法.感觉自己的写的博客,就跟自己的笔记一样,用的是时候,就能快速的查找 ...

  7. 鸟哥的Linux私房菜——第十六章:学习Shell Scripts

    视频链接:http://www.bilibili.com/video/av10565321/ 1. 什么是 Shell Script       (shell写的脚本)1.1 干嘛学习 shell s ...

  8. Spark记录-Scala函数与闭包

    函数声明 Scala函数声明具有以下形式 - def functionName ([list of parameters]) : [return type] Scala 如果不使用等号和方法体,则隐式 ...

  9. JAVA多线程之线程的挂起与恢复(suspend方法与resume方法)

    一,介绍 本文讨论JAVA多线程中,使用 thread.suspend()方法暂停线程,使用 thread.resume()恢复暂停的线程 的特点. 先介绍二个关于线程的基本知识: ①线程的执行体是r ...

  10. [整理]ASP.NET WEB API 2学习

    目录 1 快速入门 1.1实例 1.1.1初识WEB API 2 1.1.2 Action Results 的改变 1.1.3 路由的新增特性 1.1.4 消息管道的变化 1.1.4.1 HttpMe ...