輸入檔案 short.in,共有n+m+3行,其中:
第一行為乙個整數n。
第2行到第n+1行(共n行),每行的兩個整數x和y,描述乙個點的座標(以乙個空格隔開)。
第n+2行為乙個整數m,表示圖中的連線個數。
此後的m行,每行描述一條連線,由兩個整數i,j組成,表示第i個點和第j個點之間有連線。
最後一行:兩個整數s和t,分別表示源點和目標點。
輸出檔案short.out僅一行,乙個實數(保留兩位小數),表示從s到t的最短路徑的長度。
50 0
2 02 2
0 23 1
51 2
1 31 4
2 53 5
1 53.41
floyed-warshall(弗洛伊德)演算法
dijkstra演算法
bellman-ford(福特)演算法
spfa演算法
注意事項:
方法一floyed(弗洛伊德)演算法
#include
#include
#include
using
namespace std;
struct emm
a[110];
double b[
110]
[110];
int l,ll,s,t,n,m;
intmain()
scanf
("%d%d"
,&s,
&t);
//求從s到t的最短路徑
for(
int k=
1;k<=n;
++k)
//floyed
for(
int i=
1;i<=n;
++i)
for(
int j=
1;j<=n;
++j)
if(k!=i && k!=j && i!=j)
if(b[i]
[j]>b[i]
[k]+b[k]
[j])
b[i]
[j]=b[i]
[k]+b[k]
[j];
printf
("%.2lf\n"
,b[s]
[t])
;return0;
}
方法二
dijkstra演算法
#include
#include
#include
const
double hhg=
75000
;struct emm
a[101];
int n,m,s,t,o,l,ll;
bool f[
101]
;double b[
101]
[101
],c[
101]
,yyg;
intmain()
scanf
("%d%d"
,&s,
&t);
//求從s到t的最短路徑
for(
int i=
1;i<=n;
++i) c[i]
=b[s]
[i];
//dijkstra
f[s]
=true
,c[s]=0
;//標記f[s]為「已求出」;c[s]到自己的最短距離是0
for(
int i=
1;i++i)
printf
("%.2lf\n"
,c[t]);
}
方法三
bellman-ford(福特)演算法
#include
#include
#include
using
namespace std;
struct emm
a[101];
double b[
1001
],c[
101]
;bool h[
101]
;int l[
1001
],ll[
1001
],n,m,s,t;
intmain()
scanf
("%d%d"
,&s,
&t);
//求從s到t的最短路徑
memset
(c,0x7f
,sizeof
(c))
;//ford
c[s]=0
;//c[s]到自己的最短距離是0
for(
int i=
1;iif(c[ll[j]
]+b[j]
//}if(
!hfy)
break;}
printf
("%.2lf"
,c[t]);
return0;
}
方法四
spfa演算法
#include
#include
#include
using
namespace std;
struct emm
f[2001];
double dis[
101]
;bool pd[
101]
;int a[
101][2
],ls[
101]
,bty[
2001];
int n,m,ll,lr,s,t,l,r=
1,u,o,q;
intmain()
scanf
("%d%d"
,&s,
&q);
memset
(dis,
0x7f
,sizeof
(dis));
dis[s]=0
,bty[1]
=s,pd[s]
=true
;while
(lprintf
("%.2lf"
,dis[q]);
return0;
}
SSL 1613 最短路徑問題(最短路)
description 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 輸入檔案short.in,共有n m...
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之間。其中...