题目链接:https://www.nowcoder.com/acm/contest/105/F

解题思路:这道题第一眼直接思路就是搜索,但想了半天没想到有什么好办法搜,然后就转成最短路写了,

因为多入口和出口,建立一个汇点一个源点,权值自己设,然后上下左右能相连的权值为1,传送阵(能用的前提下)入口和出口两个点的权值设为3;

然后就是最短路;

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 400005
#define inf 0x3f3f3f3f
using namespace std;
struct Edge
{
int next;
int to;
int w;
}edge[maxn];
struct node
{
int num;
int dist;
node(int _num=0,int _dist=0):num(_num),dist(_dist){}
friend bool operator<(node a,node b)
{
return a.dist>b.dist;
}
};
int head[maxn];
int cnt;
int dist[maxn];
int visit[maxn];
int ans[maxn];
void add(int u,int v,int w)
{
edge[cnt].next=head[u];
edge[cnt].to=v;
edge[cnt].w=w;
head[u]=cnt++;
}
void dij(int u)
{
priority_queue<node>q;
memset(dist,inf,sizeof(dist));
memset(visit,0,sizeof(visit));
dist[u]=0;
q.push(node(u,0));
while(!q.empty())
{
node p=q.top();
q.pop();
int now=p.num;
for(int i=head[now];i!=-1;i=edge[i].next)
{
Edge e=edge[i];
if(dist[e.to]>dist[now]+e.w)
{
dist[e.to]=dist[now]+e.w;
q.push(node(e.to,dist[e.to]));
}
}
}
}
int main()
{
int n,m,q;
int x,y,w;
int tx,ty,ex,ey;
int cot=0;
char s[500][500];
while(cin>>n>>m>>q)
{
cot=cnt=0;
memset(head,-1,sizeof(head));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>s[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(s[i][j]!='#')
{
if(s[i+1][j]!='#'&&i+1<=n)
{
x=(i-1)*m+j;y=(i)*m+j;add(x,y,1);
}
if(s[i-1][j]!='#'&&i-1>=1)
{
x=(i-1)*m+j;y=(i-2)*m+j;add(x,y,1);
}
if(s[i][j+1]!='#'&&(j+1)<=m)
{
x=(i-1)*m+j;y=(i-1)*m+j+1;add(x,y,1);
}
if(s[i][j-1]!='#'&&(j-1)>=1)
{
x=(i-1)*m+j;y=(i-1)*m+j-1;add(x,y,1);
}
}
if(s[i][j]=='S')
{
x=0;y=(i-1)*m+j;add(x,y,1);
}
if(s[i][j]=='T')
{
ans[++cot]=(i-1)*m+j;
}
}
while(q--)
{
cin>>tx>>ty>>ex>>ey;
tx++;ty++;ex++;ey++;
if(s[tx][ty]!='#'&&s[ex][ey]!='#')
{
x=(tx-1)*m+ty;y=(ex-1)*m+ey;
add(x,y,3);
}
}
dij(0);
int a=inf;
for(int i=1;i<=cot;i++)
{
a=min(a,dist[ans[i]]);
}
if(a==inf)
cout<<"-1\n";
else
cout<<a-1<<endl;
}
}

  

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

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

    把点抽出来 跑个最短路就好啦. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> # ...

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

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

  3. 牛客网 2018年东北农业大学春季校赛 L题 wyh的天鹅

    链接:https://www.nowcoder.com/acm/contest/93/L来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 262144K,其他语言524288 ...

  4. 牛客网 2018年东北农业大学春季校赛 I题 wyh的物品

    链接:https://www.nowcoder.com/acm/contest/93/I 来源:牛客网 时间限制:C/C++ 5秒,其他语言10秒空间限制:C/C++ 262144K,其他语言5242 ...

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

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

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

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

  7. 牛客网-2018年全国多校算法寒假训练营练习比赛(第四场)-A

    解题思路:二分图的最大匹配,但这题是所有点都遍历一遍,所以答案/2: 代码: #include<iostream> #include<algorithm> #include&l ...

  8. 牛客网2018暑期训练 第三场 a题

    #include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][m ...

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

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

随机推荐

  1. buildroot使用介绍

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...

  2. oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理

    问题产生的操作步骤及详细说明: 1)操作的数据库是oracle 11g,先通过命令将用户GAS_NEW的数据导出,命令语句如下: expdp GAS_NEW/GAS_NEW@ORCL schemas= ...

  3. php 数组元素快速去重

    1.使用array_unique方法进行去重 对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重. <?php $arr = array(,,,, ...

  4. 【原创】一个线程oom,进程里其他线程还能运行吗?

    引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? 先说一下答案,答案是还能运行 不瞒大家说, ...

  5. 跨界 - Omi 发布多端统一框架 Omip 打通小程序与 Web

    Omip 今天,Omi 不仅仅可以开发桌面 Web.移动 H5,还可以直接开发小程序!直接开发小程序!直接开发小程序! Github Omi 简介 Omi 框架是微信支付线研发部研发的下一代前端框架, ...

  6. 二维数组中的查找问题--剑指offer面试题3

    题目:在一个二维数组中,对每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. // 二维数组中的查找 ...

  7. 牛客练习赛38 D 出题人的手环

    链接 [https://ac.nowcoder.com/acm/contest/358/D] 题意 链接:https://ac.nowcoder.com/acm/contest/358/D 来源:牛客 ...

  8. haoop笔记

    : //:什么是hadoop? hadoop是解决大数据问题的一整套技术方案 :hadoop的组成? 核心框架 分布式文件系统 分布式计算框架 分布式资源分配框架 hadoop对象存储 机器计算 :h ...

  9. #Leetcode# 989. Add to Array-Form of Integer

    https://leetcode.com/problems/add-to-array-form-of-integer/ For a non-negative integer X, the array- ...

  10. git repository description

    Git - Plumbing and Porcelainhttps://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain gith ...