畅通工程续(HDU 1874)附上超详细源代码
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
注意:
考虑两点间的重边,以及起点和终点重合的情况
#include <stdio.h>
#include <string.h> #define INF 200000000 //定义INF为无穷大
#define MAX 200 int dijkstra(int map[][MAX],int sp,int tp,int n)
{
int dist[MAX]; //存放起点到其他顶点的距离
int s[MAX]; //存放已选出的顶点
int minDist; //一个中间变量
int u; //一个中间变量
int i,j;
memset(s,,sizeof(s)); //用0初始化s
for (i=; i<n; i++) //用map初始化dist
dist[i] = map[sp][i];
dist[sp] = ; //起点到起点距离围为0
s[sp] = ; //将起点放入集合s
for (j=; j<n-; j++)
{
//找出第一个距离最近的顶点
minDist = INF;
u = sp;
for (i=; i<n; i++)
if (!s[i]&&dist[i]<minDist)
{
minDist = dist[i];
u = i;
}
s[u] = ; //将找出的这个顶点放入集合s
//如果终点已找出,退出循环
if (s[tp])
break;
//用找出的这个顶点更新起点到其他顶点的距离
for (i=; i<n; i++)
if (!s[i]&&map[u][i]!=INF&&dist[i]>map[u][i]+dist[u])
dist[i] = map[u][i]+dist[u];
}
//将起点到终点的最短距离返回
if (dist[tp]!=INF)
return dist[tp];
return -;
} int main()
{
int map[MAX][MAX]; //邻接矩阵map
int dist; //起点到终点最短距离
int a,b,x;
int n,m;
int s,t;
int i,j;
while (~scanf("%d%d",&n,&m))
{
for (i=; i<n; i++) //用无穷大INF初始化邻接矩阵map
for (j=; j<n; j++)
map[i][j] = INF;
for (i=; i<m; i++) //用真实距离更新邻接矩阵
{
scanf("%d%d%d",&a,&b,&x);
if (map[a][b]>x) //如果有重边,保存距离短的
map[a][b] = map[b][a] = x;
}
scanf("%d%d",&s,&t); //输入起点,终点
dist = dijkstra(map,s,t,n);
//将结果输出
printf("%d\n",dist);
}
return ;
}
畅通工程续(HDU 1874)附上超详细源代码的更多相关文章
- 畅通工程续 HDU - 1874
某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在 ...
- 畅通工程续 -- HDU 1874 floyd
题目大意: 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. 思路: floyd算法模板题,这是一个牺牲空间换取时间的算法,本质是动态规划. AC代码: #include < ...
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- hdu 1874 畅通工程续
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...
- hdu 1874 畅通工程续 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...
- HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
随机推荐
- Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)
前言 本文主要介绍 MapReduce 的原理及开发,讲解如何利用 Combine.Partitioner.WritableComparator等组件对数据进行排序筛选聚合分组的功能.由于文章是针对开 ...
- InstallShield 创建 visual studio 工程的时候 指向 任意 visual studio 版本 方法 (修改 计算机 默认 visual studio shell 版本)
这需要 修改 计算机 默认 visual studio shell 版本 注册表 HKEY_CLASSES_ROOT VisualStudio.DTE 配置节点 描述的是 默认的 visual stu ...
- MySQL备份---lvm snapshot
正常安装(缺点要锁表) 1, 创建一个LV(逻辑卷) , 把MySQL的数据目录放到这个LV上 /var/lib/mysql 对这个LV做快照, 从快照备份数据 删除快照 非正常安装 1,创建LV 2 ...
- Python基础教程(第3版) 笔记(二)
1.8模块Python提供了完成(某人的年 龄为32.9,并想将这个值向下圆整为32,因为他还没有满33岁)这种任务的函 数floor.导入模块,可以使用特殊命令import.函数floor包含在模块 ...
- python的数据驱动
什么叫数据驱动? 登录用例 ->不用的用户名登录,但是自动化化脚本一样,虽然脚本相同,步骤相同,但是不同的用户名登录得出的数据是不一样的,于是就有了数据驱动,就是数据的改变驱动自动化测试的执行导 ...
- 如何在Mac下配置Github和Bitbucket的SSH
--- title: 如何在Mac下配置Github和Bitbucket的SSH date: 2017-12-23 21:10:30 tags: - Mac - Git - Github catego ...
- 课程五(Sequence Models),第一 周(Recurrent Neural Networks) —— 2.Programming assignments:Dinosaur Island - Character-Level Language Modeling
Character level language model - Dinosaurus land Welcome to Dinosaurus Island! 65 million years ago, ...
- Android Studio 快捷键总结(OS X)
Action shortcut key 解释 跳转到类 cmd+0 跳转到文件 cmd+shift+0 跳转到函数 cmd+alt+0 最近打开的文件 cmd+e 最近编辑的文件 ...
- 《Kubernetes权威指南》——组件原理
1 API Server 1.1 提供集群管理的API接口 API Server在kubernetes中的进程名为apiserver,运行在Master节点上 apiserver开放两个端口 本地端口 ...
- 从零开始学 Web 之 jQuery(八)each,多库共存,包装集,插件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...