相邻格子连双向边,如果一个点有障碍,那进它的边权就是1,否则是0

这样的话,两点间的最短路+[起始点有障碍],就是从一个点走到另一个需要清除的障碍的个数

求出最短路后枚举这两个点就可以了

然而30*30还是太大跑不开floyd,只能写一个dijkstra

 #include<bits/stdc++.h>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pa;
const int maxn=,npm=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int id[maxn][maxn];
int dis[npm][npm];
int N,M,T;
char can[npm][npm];
priority_queue<pa,vector<pa>,greater<pa> > q;
bool flag[npm]; inline void chkmin(int s,int x,int y){
if(dis[s][x]>y)
dis[s][x]=y,q.push(make_pair(y,x));
} inline void getdis(int s){
CLR(dis[s],);CLR(flag,);
dis[s][s]=;q.push(make_pair(,s));
while(!q.empty()){
int p=q.top().second;q.pop();
// printf("~%d %d %d\n",s,p,dis[s][p]);
if(flag[p]) continue;flag[p]=;
int i=(p-)/M+,j=p%M;if(!j) j=M;
if(i<N) chkmin(s,id[i+][j],dis[s][p]+can[i+][j]-'');
if(i>) chkmin(s,id[i-][j],dis[s][p]+can[i-][j]-'');
if(j<M) chkmin(s,id[i][j+],dis[s][p]+can[i][j+]-'');
if(j>) chkmin(s,id[i][j-],dis[s][p]+can[i][j-]-'');
}
} int main(){
//freopen("","r",stdin);
int i,j,k=;
N=rd(),M=rd(),T=rd();
for(i=;i<=N;i++){
scanf("%s",can[i]+);
for(j=;j<=M;j++)
id[i][j]=++k;
}
for(i=;i<=N;i++){
for(j=;j<=M;j++){
getdis(id[i][j]);
}
}
double ans=;
for(i=;i<=N;i++){
for(j=;j<=M;j++){
for(k=;k<=N;k++){
for(int l=;l<=M;l++){
if(dis[id[i][j]][id[k][l]]+can[i][j]-''<=T) ans=max(ans,sqrt(0.0+(k-i)*(k-i)+(l-j)*(l-j)));
}
}
}
}
printf("%.6lf\n",ans);
return ;
}

luogu4162 最长距离 (dijkstra)的更多相关文章

  1. [luogu4162 SCOI2009] 最长距离(最短路)

    传送门 Solution 题目是最长路,其实是最短路ヽ(ー_ー)ノ 把进入障碍点的边设为1,其他为0.枚举每个点为起点找距离<=T的点,更新答案 Code //By Menteur_Hxy #i ...

  2. POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)

    题目链接: http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of ...

  3. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  4. 最短路径算法-Dijkstra

    Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...

  5. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  6. POJ 2253 Frogger(Dijkstra)

    传送门 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39453   Accepted: 12691 Des ...

  7. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  8. Dijkstra 算法

    all the nodes should be carectorized into three groups: (visited, front, unknown) we should pay spec ...

  9. 51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)

    题目链接 中文题,迪杰斯特拉最短路径算法模板题. #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f ],v ...

随机推荐

  1. vue动态class——实现tag的选中状态

    vue动态class——实现tag的选中状态 <template> <div class="common-nav"> <div class=" ...

  2. Oss文件存储

    包含文件的上传下载和生成临时的url # -*- coding: utf-8 -*- import os import oss2 import configparser from Config imp ...

  3. Vmware的虚拟机示例进入BIOS方法

    虚拟机(Vmware)怎么进入BIOS_百度经验 https://jingyan.baidu.com/article/7e440953e566472fc0e2eff7.html Vmware虚拟机进入 ...

  4. 微信开发 提示 Redirect_uri(错误10003)

    情景: 搭建完成一个网站,使用微信打开链接地址,结果报错1003 完整的错误信息: 出现这种情况一般有两种原因: 1.没有配置网页授权  我们可以根据微信的开发者文档http://mp.weixin. ...

  5. 【开讲啦】20181029 oracle教学笔记

    --创建表空间 create tablespace waterboss--表空间名称 datafile 'd:\waterboss.dbf'--用于设置物理文件名称 size 100m--用于设置表空 ...

  6. ArrayList性能短板深入分析

    ArrayList的数据结构主体是Object[]数组,数组对象在内存的位置是成块成块的. 1.对数组进行非尾部修改,会引发System.arrayCopy()行为.这就需要对后半部要移动的对象进行内 ...

  7. 阿里p3c(代码规范,eclipse插件、模版,idea插件)

    阿里p3c 一.说明 代码规范检查插件p3c,是根据<阿里巴巴Java开发手册>转化而成的自动化插件. (高级黑:P-3C“Orion”,反潜巡逻机,阿里大概取p3c先进,监测,发现潜在问 ...

  8. 注解方式过滤器(Filter)不能过滤Servlet的问题

    https://www.aliyun.com/jiaocheng/778495.html 今天写filter(过滤器)的时候,碰到一个奇怪的问题,发现filter可以过滤urlPatterns,但是无 ...

  9. Lodop打印项对象类型属性区分

    Lodop提供了一些打印项类型,默认是普通项,通过设置打印对象的类型,可以实现一些普通项不能实现的效果.例如:该博客另一篇博文 标题是Lodop打印控件 打印‘接下一页’‘以下空白’,就用了眉脚项. ...

  10. poj-1724(bfs+优先队列)

    题意:有向图,给你m条边,每条边有两个权值,路径长和通过这条路径的花费,问你在不超过k花费的前提下,最短的路径从1走到n 解题思路:因为边数很少,我们可以直接用暴力每条边的方式来找最小的路径长,也就是 ...