zoukankan      html  css  js  c++  java
  • 最短路径问题(Floyd算法)

    题意

    平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。


    分析

    先算出点与点之间的距离

    距离=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]))

    然后就很好做了


    var
    n,i,j,k,s,t,m,x1,y1:longint;
    x,y:array[0..200]of longint;
    a:array[0..200,0..200]of real;
    begin
        readln(n);
        for i:=1 to n do
        readln(x[i],y[i]);
        readln(m);
        fillchar(a,sizeof(a),127);
        for i:=1 to m do
        begin
            readln(x1,y1);
            a[x1,y1]:=sqrt(sqr(x[x1]-x[y1])+sqr(y[x1]-y[y1]));
            a[y1,x1]:=a[x1,y1];
        end;
        read(s,t);
        for i:=1 to n do
        for j:=1 to n do
        for k:=1 to n do
        if a[j,i]+a[k,i]<a[j,k] then a[j,k]:=a[j,i]+a[k,i];
        write(a[s,t]:0:2);
    end.

  • 相关阅读:
    C语言调试示例
    Tiff格式详解(转载)
    指纹
    twitter
    baidu
    NoSuchMethodError随记
    IllegalArgumentException异常
    Springboot2.2.9接入阿里云ES(带高亮查询)
    阿里云ECS安装cnpm
    阿里云ECS安装docker
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500146.html
Copyright © 2011-2022 走看看