SSL 最短路徑問題 FDBS

2021-09-09 07:23:43 字數 3203 閱讀 1368

輸入檔案 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之間。其中...