畅通工程续

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9566    Accepted Submission(s): 3200

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
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
Sample Input
3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2

Sample Output
2
-1

注意:两地之间可能有多条路。所以输入时要去最小值。
View Code

#include <set>#include <map>#include <list>#include <cmath>#include <ctime>#include <deque>#include <queue>#include <stack>#include <cstdio>#include <string>#include <vector>#include <cctype>#include <cstring>#include <sstream>#include <fstream>#include <cstdlib>#include <cassert>#include <iostream>#include <algorithm>

using namespace std;//Constant Declaration/*--------------------------*///#define LL long long #define LL __int64const int M=250;//最多点数const int INF=1<<30;const double EPS = 1e-11;const double PI = acos(-1.0);/*--------------------------*/// some essential funtion/*----------------------------------*/void Swap(int &a,int &b){   int t=a;a=b;b=t; }int Max(int a,int b){   return a>b?a:b;  }int Min(int a,int b){   return a<b?a:b;  }int Gcd(int a,int b){   while(b){b ^= a ^=b ^= a %= b;}  return a; }/*----------------------------------*///for (i = 0; i < n; i++)/*----------------------------------*/

int d[M];//表示i到源点的最短距离int g[M][M];//邻接矩阵bool used[M];//标记i是否被用过

void init(int n){int i, j;for (i = 0; i < n; i++)    {for (j = 0; j < n; j++)        {            g[i][j] = INF;//初始化图没有边,默认为INF,为了一定更新        }    }for (i = 0; i < n; i++)    {        d[i] = INF;    }

    memset(used, false, sizeof(used));}

int dijkstra(int star, int end, int n)//起点,终点,总点数(编号为1,2...n){int min_num = 1;//最小值的位置    int i;    d[star] = 0;//起点到起点的最短距离为0,很重要的一步    for (int cnt = 0; cnt < n; cnt++)//注意别用while(n--),这样会改变n的值。n次贪心    {int min = INF;for (i = 0; i < n; i++)        {if (!used[i] && d[i] < min)            {                min = d[i];                min_num = i;            }        }

        used[min_num] = 1;

//把d[min_num]作为中间点,对相邻的点做松弛        for (i = 0; i < n; i++)        {if (!used[i] && d[i] > d[min_num] + g[min_num][i])            {                d[i] = d[min_num] + g[min_num][i];            }        }

    }return d[end];}int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);//int t, case1 = 0;//scanf("%d", &t); int n, m;int i, j;while (scanf("%d%d", &n, &m) != EOF) {     init(n);while (m--)    {int a, b, c;        scanf("%d%d%d", &a, &b, &c);        g[b][a] = g[a][b] = Min(c, g[a][b]);//此题为无向图    }int star, end;    scanf("%d%d", &star, &end);int ans = dijkstra(star, end, n);if(INF == ans)    {        puts("-1");    }else    {      printf("%d\n", ans);    } }

return 0;}

转载于:https://www.cnblogs.com/qiufeihai/archive/2012/03/06/2382470.html

HDU 1874 畅通工程续相关推荐

  1. 杭电 hdu 1874 畅通工程续

    第二次 /* THE PROGRAM IS MADE BY PYY */ /*------------------------------------------------------------- ...

  2. HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:          http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...

  3. HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

    畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...

  4. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...

  5. HDU 1874 畅通工程续 Floyd

    畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Time Limit: 3000/1000 MS (Java/Others) Memory L ...

  6. hdu 1874畅通工程续(基础Floyd)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. HDU 1874 畅通工程续 最短路

    畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 某 ...

  9. hdu 1874 畅通工程续(模板题 spfa floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 1 #include<iostream> 2 #include<s ...

最新文章

  1. 深度学习的多个loss如何平衡?
  2. ×××论坛应该为访问者更大的价值
  3. 这个神器竟然能分分钟将多个 kubeconfig 合并成一个!
  4. IntelliJ IDEA创建maven web项目
  5. 斯特林数 java实现_斯特林数学习笔记
  6. charles请求转发_Charles安装与基本操作
  7. Android Debug Bridge 技术实现原理
  8. Linux中移动,复制,删除,打包排除某个目录或文件
  9. 缴费报修小程序开发制作功能介绍
  10. 虹科案例|光刻机汞灯替代者—定制大功率UV-LED平行光源
  11. 如何将自己网络计算机更名,如何将自己的win7电脑变身wifi无线网络热点
  12. android虚拟按键实现,虚拟按键的实现
  13. 吴忠文化旅游的现状与问题
  14. 深度解读互联网新时代:Web3.0
  15. Outsider(HNOI2019)
  16. 计算机教育cscd,工程技术方向论文投稿,这几本CSCD期刊值得推荐
  17. iPhone的全新创意 变身成收音机
  18. mysql 按月统计排序,mysql按月统计_实现mysql按月统计的教程
  19. Java排序修真:从入门到进阶,从后天生灵到祖神祖仙
  20. 【初学者系列】02-算法实例Jupyter转换为Python流程

热门文章

  1. 央行无意放宽松,7月贷款仍有可能吃紧
  2. 王重敏的“中国主义”
  3. java中类与类的关系_Java中类与类的关系
  4. jap和java有关系吗_hibernate与jpa有什么区别和联系?
  5. delphi打印html文件路径,Delphi获取文件名、不带扩展名文件名、文件所在路径、上级文件夹路径的方法...
  6. mysql zero fill_mysql zerofill 的使用
  7. 图形学教程Lecture 2: Review of Linear Algebra知识点总结
  8. Windows Mobile Widget Emulator
  9. 英语进阶系列-A06-本周总结
  10. ACM10.14题解