HDU 1874 暢通工程續(最短路)

2021-07-04 10:09:35 字數 2305 閱讀 5985

problem description

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

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

input

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

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

output

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

sample input

3 3

0 1 1

0 2 3

1 2 1

0 23 1

0 1 1

1 2

sample output

2

-1

【思路分析】 乙個裸的求最短路徑,其中乙個值得注意的坑點就是對於兩個結點之間的路徑可能會有多次不同的輸入,所以要保證輸入的是最短的才能滿足題意。

**如下:

floyd演算法:

#include #include #include #include #include #include using namespace std;

#define inf 99999999

#define maxn 210

int maps[maxn][maxn];

int n,m;

int floyd(int s,int t)

int main()

scanf("%d %d",&s,&t);

ans = floyd(s,t);

printf("%d\n",ans);

}return 0;

}

dijkstra演算法:

#include #include #include #include #include #include #include using namespace std;

#define inf 99999999

#define maxn 210

int maps[maxn][maxn],dis[maxn],visited[maxn];

int n,m;

using namespace std;

int dijkstra(int s,int t)

dis[s] = 0;

visited[s] = 1;

int temp,k;

for(int i = 0;i < n;i++)

}if(temp == inf)

break;

visited[k] = 1;

for(int j = 0;j < n;j++)

}if(dis[t] == inf)

return -1;

else

return dis[t];

}int main()

scanf("%d %d",&s,&t);

ans = dijkstra(s,t);

printf("%d\n",ans);

}return 0;

}

spfa演算法:

#include #include #include #include #include #include #include using namespace std;

#define inf 99999999

#define maxn 210

int maps[maxn][maxn];

int visited[maxn],dis[maxn];

int n,m;

queueq;

int spfa(int s,int t)

while(!q.empty())

q.pop();

dis[s] = 0;

visited[s] = 1;

q.push(s);//起點入隊

while(!q.empty())}}

}if(dis[t] == inf)

return -1;

else

return dis[t];

}int main()

scanf("%d %d",&s,&t);

ans = spfa(s,t);

printf("%d\n",ans);

}return 0;

}

hdu1874 暢通工程續 (最短路)

已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。經典的單源 最短路 用dijkstra,這裡要注意的是有重邊,取最小的那個。已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。經典的單源 最短路 用dijkstra,這裡要注意的是有重邊,取最小的那個。include in...

hdu1874 暢通工程續(最短路)

思路 最短路裸題 includeusing namespace std const int maxn 205 const int inf 1e9 int n,m vector e maxn int d maxn void init int main while scanf d d n,m eof i...

HDU 1874 暢通工程續 (最短路)

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