最短路径问题(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.

原文地址:https://www.cnblogs.com/YYC-0304/p/9500146.html