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。第...