题意
平面上有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.