原题传送门

题目描述

中山路店山店海,成了购物狂爱与愁大神的“不归之路”。中山路上有n(n<=100)家店,每家店的坐标均在-10000~10000之间。其中的m家店之间有通路。若有通路,则表示可以从一家店走到另一家店,通路的距离为两点间的直线距离。现在爱与愁大神要找出从一家店到另一家店之间的最短距离。你能帮爱与愁大神算出吗?

输入格式

共n+m+3行:

第1行:整数n

第2行~第n+1行:每行两个整数x和y,描述了一家店的坐标

第n+2行:整数m

第n+3行~第n+m+2行:每行描述一条通路,由两个整数i和j组成,表示第i家店和第j家店之间有通路。

第n+m+3行:两个整数s和t,分别表示原点和目标店

输出格式

仅一行:一个实数(保留两位小数),表示从s到t的最短路径长度。

输入输出样例

输入 #1

5
0 0
2 0
2 2
0 2
3 1
5
1 2
1 3
1 4
2 5
3 5
1 5

输出 #1

3.41

说明/提示

100%数据:n<=100,m<=1000

----------------------------------------------以下为题解部分-------------------------------------------------------------

分析:

这个题通过简单的分析题意,可以看出,显然是一道

SPFA的题(标签里的。。。。。。)

## But 本人太弱。。。。。。

NO Problem,无伤大雅

我们用Floyd来代替一下

这道题求任意两点之间的距离,众所周知,Floyd可以求任意两点的最短路,而且包括负边权,很强大


先补充一点预备知识:

两点间距离公式:对于平面上两点(x1,y1),(x2,y2)他们的直线距离为

\[
\sqrt {(x1-x2)^2+(y1-y2)^2}
\]


代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int a[101][3];
double f[101][101]  //f[i][j]表示i点到j点的最短路;
int n,i,j,k,x,y,m,s,e;
int main(){
    cin>>n;
    for(i=1;i<=n;i++) cin>>a[i][1]>>a[i][2];
    cin>>m;
    memset(f,0x7f,sizeof(f));  //在没有已知连接不连接的情况下,对于有权值的图
                                //我们全部预处理成无限大
    for(i=1;i<=m;i++){         //对于有连接的,我们用两点间距离公式更新距离
        cin>>x>>y;  //第二次输入有连接的
        f[y][x]=f[x][y]=sqrt(pow(double(a[x][1]-a[y][1]),2)+pow(double(a[x][2]-a[y][2]),2));
    }
    cin>>s>>e;  //原点和目标点
    //Floyd关键部分
    for(k=1;k<=n;k++){
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                if((i!=j)&&(i!=k)&&(j!=k)&&(f[i][k]+f[k][j]<f[i][j])) f[i][j]=f[i][k]+f[k][j];
                //如果有一个点k,使原先找到的最短路f[i][j]更短,则更新
            }
        }
    }
    printf("%.2lf\n",f[s][e]);    //输出要求的
    return 0;
}

但是我发现有一个更好的做法

优化核心思想

当原点和目标点之间有连线的时候,我们用两点之间距离公式求出来的距离就是最短路。我们可以加一个特判,即f[i][j]不是无穷大时,输出,结束。这样就可以少跑一边Floyd,对于某些数据,可以稍快一点。

代码请读者自行思考

洛谷题解 P1744 【采购特价商品】的更多相关文章

  1. 洛谷——P1744 采购特价商品

    P1744 采购特价商品 题目背景 <爱与愁的故事第三弹·shopping>第一章. 题目描述 中山路店山店海,成了购物狂爱与愁大神的“不归之路”.中山路上有n(n<=100)家店, ...

  2. P1744 采购特价商品 最短路径

    P1744 采购特价商品 图论-----最短路径算法 弗洛伊德算法  O(n^3) 代码: #include<iostream> #include<cstdio> #inclu ...

  3. 洛谷 P1744 采购特价商品

    题目背景 <爱与愁的故事第三弹·shopping>第一章. 题目描述 中山路店山店海,成了购物狂爱与愁大神的“不归之路”.中山路上有n(n<=100)家店,每家店的坐标均在-1000 ...

  4. P1744 采购特价商品 题解(讲解图论)

    图论的超级初级题目(模板题) 最短路径的模板题 图是啥?(白纸上的符号?) 对于一个拥有n个顶点的无向连通图,它的边数一定多于n-1条.若从中选择n-1条边,使得无向图仍然连通,则由n个顶点及这 n- ...

  5. P1744 采购特价商品

    原题链接 https://www.luogu.org/problemnew/show/P1744 一道最短路的模板题.....很简单吧 求最短路的方法有很多,但是对于刚学完Floyd的我,只会用这个. ...

  6. luogu P1744 采购特价商品

    实话说我本来想找SPFA的题,结果我硬生生的把这道题做成了Floyd 先来看题,我们会发现如果把他所给的变量都输入,那么会发现用Floyd的解法,输入占了main函数的一半长度... 题目分为两步走: ...

  7. 洛谷 题解 UVA572 【油田 Oil Deposits】

    这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...

  8. 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)

    必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...

  9. 洛谷题解P4314CPU监控--线段树

    题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...

随机推荐

  1. 了解EBP指针

    在寄存器里面有很多寄存器虽然他们的功能和使用没有任何的区别,但是在长期的编程和使用中,在程序员习惯中已经默认的给每个寄存器赋上了特殊的含义,比如:EAX一般用来做返回值,ECX用于记数等等.在win3 ...

  2. two measures precision and recall of classification

    In pattern recognition and information retrievial with binary classification , there are some measur ...

  3. POJ_2593_DP

    http://poj.org/problem?id=2593 和2479一样. #include<iostream> #include<cstdio> #define MIN ...

  4. char*a[10] ={"123456","2345"}和char*a="abcde"

  5. ARTS Week 9

    Dec 23, 2019 ~ Dec 29, 2019 Algorithm Problem 69 Sqrt(x) 实现求解平方根函数Sqrt(x) 题目链接 题目描述:给定一个非负数x,求解该数字的平 ...

  6. 刚安装了ftp之后无法使用root访问,服务器发回了不可路由的地址。使用服务器地址代替。

    真的艰辛,用了整整一个下午加晚上,才把服务器搭建好,中间真的好多坑... 错误1: vsftpd正确配置: vsftpd.conf: pam_service_name=vsftpduserlist_e ...

  7. Python LEGB (Local, Enclosing, Global, Build in) 规则

    Local 一个函数定义了一个 local 作用域; PyFrameObject 中的 f_local 属性 Global 一个 module 定义了一个 global 作用域; PyFrameObj ...

  8. 见异思迁:K8s 部署 Nginx Ingress Controller 之 kubernetes/ingress-nginx

    前天才发现,区区一个 nginx ingress controller 竟然2个不同的实现.一个叫 kubernetes/ingress-nginx ,是由 kubernetes 社区维护的,对应的容 ...

  9. Nginx location配置 正则表达式

    一. location 的匹配符 Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }location @name { ... }     1.  语法格式 ...

  10. zabbix-server配置文件详解

    zabbix官方文档:https://www.zabbix.com/documentation/4.0/zh/manual zabbix-server端的配置文件在/etc/zabbix/zabbix ...