某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 本题目包含多组数据,请处理到文件结束。 对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1. 3 3 2 最短路,迪杰斯特拉算法,O(ElogV)
hdu1874 – 畅通工程续
Problem Description
Input
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。Output
Sample Input
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2Sample Output
-1
ac代码:#include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <map> #include <queue> #include <set> #include <string> #include <vector> using namespace std; typedef long long ll; typedef pair<int, int> P;//first最短距离, second顶点编号 struct edge{ int to; int cost; }; vector<edge> G[1000]; void add(int x, int y, int z){//无向图 edge e; e.to = y; e.cost = z; G[x].push_back(e); e.to = x; e.cost = z; G[y].push_back(e); } int n, m; int s, t; int d[1000];//最短路 void dijsktra(int s){ priority_queue<P, vector<P>, greater<P> > que; memset(d, 0x3f, sizeof(d)); d[s] = 0; que.push(P(0, s)); while(!que.empty()){ P p = que.top(); que.pop(); //cout << p.first << ' ' << p.second << endl; int v = p.second; if(d[v] < p.first) continue; for(int i = 0; i < G[v].size(); i++){ edge e = G[v][i]; if(d[e.to] > d[v] + e.cost){ d[e.to] = d[v] + e.cost; que.push(P(d[e.to], e.to)); } } } if(d[t] != 0x3f3f3f3f)printf("%dn", d[t]); else printf("-1n"); for(int i = 0; i < 1000; i++) G[i].clear(); } int main(){ int a, b, c; while(~scanf("%d %d", &n, &m)){ for(int i = 0; i < m; i++){ scanf("%d %d %d", &a, &b, &c); add(a, b, c); } scanf("%d %d", &s, &t); dijsktra(s); } return 0; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算