SSL 1613 最短路徑問題(最短路)

2021-07-29 17:02:25 字數 1485 閱讀 6433

description

平面上有n個點(n<=100),每個點的座標均在-10000~10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。

input

輸入檔案short.in,共有n+m+3行,其中:

第一行為乙個整數n。

第2行到第n+1行(共n行),每行的兩個整數x和y,描述乙個點的座標(以乙個空格隔開)。

第n+2行為乙個整數m,表示圖中的連線個數。

此後的m行,每行描述一條連線,由兩個整數i,j組成,表示第i個點和第j個點之間有連線。

最後一行:兩個整數s和t,分別表示源點和目標點。

output

輸出檔案short.out僅一行,乙個實數(保留兩位小數),表示從s到t的最短路徑的長度。

sample input

5 0 0

2 0

2 2

0 2

3 1

5 1 2

1 3

1 4

2 5

3 5

1 5

sample output

3.41

一眼望去n<=100便果斷的寫了floyd的演算法。

兩點之間的距離公式為:sqrt(sqr(x1-x2)+sqr(y1-y2))

然後這題就出來了

**如下:

var  n,i,j,k,x1,x2,m,t,s:longint;

min,ans:real;

a:array[0..101,0..101]of real;

v,x,y:array[0..101]of longint;

l:array[0..101]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,x2);

a[x1,x2]:=sqrt(sqr(x[x1]-x[x2])+sqr(y[x1]-y[x2]));

a[x2,x1]:=a[x1,x2];

end;

readln(s,t);

ans:=0;

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]then a[j,k]:=a[j,i]+a[k,i];

write(a[s,t]:0:2);

end.

ssl1613最短路徑問題

description 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 輸入檔案short.in,共有n m...

ssl1613 最短路徑問題

最短路徑問題 time limit 10000ms memory limit 65536k total submit 312 accepted 160 case time limit 1000ms description 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中...

最短路徑問題 SSL 1613

平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。輸入檔案short.in,共有n m 3行,其中 第一行為乙個整數n。第...