畅通工程续,题目链接,点击这里,

畅通工程续

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

Problem Description

某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。

现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。

Input

本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(1<=N~200,1<=M~1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B小于N,A!=B,X(1~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

这个可以用弗洛伊德算法,也可以用迪杰斯特拉算法,很标准的模板题,注意的细节也有很多。听学长说,还可以用邻接表优化,但我不会优化,还要学。

以下是的迪杰斯特拉算法的代码。

#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
//#include<map>//地图  if continue
#include<math.h>
#include<string.h>
#define INF 0x3f3f3f
#define inf 10000000
using namespace std;
int map[205][205],dis[205];
int book[205];// 访问数组;
int main()
{int n,m,a,b,x,minm,u;while(~scanf("%d%d",&n,&m)){for(int i=0; i<n; i++)// 初始化矩阵;for(int j=0; j<n; j++){if(i==j)map[i][j]=0;elsemap[i][j]=INF;}for(int i=0; i<m; i++){scanf("%d%d%d",&a,&b,&x);if(x<map[a][b]){map[a][b]=x;// 无向图map[b][a]=x;}}scanf("%d%d",&a,&b);// a,b是要寻找的边;for(int i=0; i<n; i++)dis[i]=map[a][i];// 初始化距离数组为a点;memset(book,0,sizeof(book));book[a]=1;for(int i=0; i<n-1; i++)//迪杰斯特拉 核心;{minm=INF;for(int j=0; j<n; j++){if(book[j]==0&&dis[j]<minm){minm=dis[j];u=j;}}book[u]=1;//标记,不再访问;for(int v=0; v<n; v++)//松弛if(map[u][v]<INF)if(dis[v]>dis[u]+map[u][v])dis[v]=dis[u]+map[u][v];}printf("%d\n",dis[b]==INF?-1:dis[b]);}return 0;
}

另外补了一道和也差不多是模板题的迪杰斯特拉。

poj 1874 题目链接,畅通工程续。

AC代码:

#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
//#include<map>//地图  if continue
#include<math.h>
#include<string.h>
#define INF 0x3f3f3f
#define inf 10000000
using namespace std;
int map[205][205],dis[205],book[205];
int main()
{int n,m,a,b,x,minm,u;while(scanf("%d%d",&n,&m)&&n&&m){for(int i=0; i<n; i++)// 初始化矩阵;{for(int j=0; j<n; j++)map[i][j]=INF;map[i][i]=0;}while(m--){scanf("%d%d%d",&a,&b,&x);a--;b--;if(x<map[a][b]){map[a][b]=x;// 无向图map[b][a]=x;}}dis[0]=0;for(int i=0; i<n; i++)dis[i]=map[0][i];memset(book,0,sizeof(book));book[0]=1;for(int i=1; i<n; i++){minm=INF;for(int j=0; j<n; j++){if(!book[j]&&dis[j]<minm){minm=dis[j];u=j;}}book[u]=1;for(int v=0; v<n; v++)if(map[u][v]<INF)if(dis[v]>dis[u]+map[u][v]&&!book[v])dis[v]=dis[u]+map[u][v];}printf("%d\n",dis[n-1]==INF?-1:dis[n-1]);}return 0;
}

poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)相关推荐

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

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

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

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

  3. 杭电 hdu 1874 畅通工程续

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

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

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

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

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

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

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

  7. HDU 1874 畅通工程续 Floyd

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

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

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

  9. HDU 1874 畅通工程续

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

最新文章

  1. 机器学习组队【计划及安排】
  2. android notification 定时显示,Android编程使用Service实现Notification定时发送功能示例...
  3. 前端技术周刊 2019-02-26:前端代码保护
  4. Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】
  5. Python3--unitest框架的使用
  6. kaggle用命令提交
  7. 方立勋_30天掌握JavaWeb_jdbc实现客户关系管理(未完)
  8. elasticsearch 5.1 问题 ubuntu
  9. LeetCode 1426. 数元素(哈希set)
  10. 在Kubernetes上运行区块链服务(BaaS)
  11. 安装Mirantis OpenStack Fuel 9.0
  12. python连接mongodb的库文件pymongo
  13. php svn更改密码,svn 开启修改备注
  14. vue 实现数据滚动显示_vue 通过定时器轮询获取后台数据--滚动条显示在底部(展示最新的内容)...
  15. 老罗如果输了整个民族都输了
  16. Apache 安装详解
  17. Java api文档自动生成工具smartdoc+torna
  18. Nico的刷题日记(一)
  19. PostGIS教程十三:地理
  20. 软件评测师知识点7-11

热门文章

  1. Chrome出现错误代码:DNS_PROBE_FINISHED_NXDOMAIN
  2. MySQL数据文件介绍及存放位置(*)
  3. matlab电动汽车路径优化——考虑中途充电
  4. Universal link 原理
  5. 罗马数字 与 阿拉伯数字 互转工具类
  6. 散户投资者如何成为“七亏二平一赚”中的一赚?
  7. 服务器自动重启的原因及解决方法
  8. Typora 瘦身 + 标题编号 + 图片同步
  9. 再次配置iterm2+zsh替代terminal
  10. UseAuthentication和UseAuthorization