最短路 暢通工程續

2021-06-23 09:45:35 字數 3914 閱讀 5610

description

某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。 

現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。

input

本題目包含多組資料,請處理到檔案結束。 

每組資料第一行包含兩個正整數n和m(0

output

對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出-1. 

sample input

3 30 1 1

0 2 3

1 2 1

0 23 1

0 1 1

1 2

sample output

2

-1

//dijkstra演算法

#include

#include

#include

#include

using

namespace std;

#define n 10000

int inf=

99999

;int map[n][n];

int dis[n];

int vis[n];

int n,m;

int s,e;

void

dijkstra

(int n)

vis[s]=1;

for(

int i=

0;i;i++)

} vis[pos]=1;

for(

int j=

0;jif(dis[e]>=inf)

printf

("-1\n"

);else

printf

("%d\n"

,dis[e]);

}int

main

()for

(int i=

0;iscanf

("%d%d"

,&s,&e);

dijkstra

(n);

}return0;

}

//

floyd演算法

#include

#include

#include

#include

using

namespace std;

#define n 10000

int inf=

99999

;int map[n][n];

int dis[n];

int vis[n];

int n,m;

int s,e;

void

floyd

()int

main

()for

(int i=

0;iscanf

("%d%d"

,&s,&e);

floyd

();}

return0;

}

//bellman-ford

#include

#include

#include

#include

using

namespace std;

#define n 10000

int inf=

99999

;int map[n][n];

int dis[n];

int n,m;

int s,e;

void

bellman

()for

(int i=

0;i;i++)}}

}if(dis[e]!=inf)

printf

("%d\n"

,dis[e]);

else

printf

("-1\n"

);}intmain

()for

(int i=

0;iscanf

("%d%d"

,&s,&e);

bellman

();}

return0;

}

//spfa

#include

#include

#include

#include

using

namespace std;

const

int n=

10000

;const

int inf=

99999

;int map[n][n];

int dis[n];

int vis[n];

int que[n];

int n,m;

int s,e;

void

spfa

() dis[s]=0;

que[in++]=s;

vis[s]=1;

while

(outvis[p]=0;

}if(dis[e]!=inf)

printf

("%d\n"

,dis[e]);

else

printf

("-1\n"

);}intmain

()for

(int i=

0;iscanf

("%d%d"

,&s,&e);

spfa

();}

return0;

}

//spfa前相星式

#include

"iostream"

#include

"cstdio"

#include

"cstring"

#include

"cstdlib"

using

namespace std;

const

int n=

1000

;const

int inf=

99999

;int dis[n];

int vis[n];

int que[n];

int n,m;

int s,e;

int cnt;

struct

edge

edge[n];

int head[n];

void

init

() cnt=0;

}void

add(

int u,

int v,

int w)

void

spfa()}

}}vis[p]=0

;}if(dis[e]printf

("%d\n"

,dis[e]);

else

printf

("-1\n"

);}intmain

()scanf

("%d%d"

,&s,&e);

spfa

();}

return0;

}

暢通工程續(最短路)

暢通工程續 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,...

暢通工程續 最短路dijkstra

from hdu 1874 time limit 1s memory limit 32mb problem description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離...

暢通工程續 最短路徑問題

暢通工程續 problem description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需...