链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

畅通工程续

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

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
 
【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】
经典最短路,但是有坑。。。。。
第一:起点与终点可能会相同
第二:两条路之间可能会有不止一条道路
第三:起点给了,要注意Dijk赋初值

缺一则WA

Dijkstra:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <map> #define INF 1000000000
#define MAXX 210
int mp[MAXX][MAXX];
int visit[MAXX],d[MAXX]; void Dijkstra(int st,int n)
{
int i,j,y;
memset(visit,,sizeof(visit));
for(int i=;i<n;i++)
{
d[i]=mp[st][i];
}
d[st]=;
for(int i=;i<n;i++)
{
int m=INF,x=;
for(y=;y<n;y++)
{
if(!visit[y] && d[y]<=m)
{
m = d[x = y];
}
}
visit[x]=;
for(y=; y<n; y++)
{
if(!visit[y] && d[y]>d[x]+mp[x][y])
{
d[y]=d[x]+mp[x][y];
}
}
}
} int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=; i<MAXX; i++)
for(j=; j<MAXX; j++)
mp[i][j]=INF;
int a,b,c,st,ed;
for(i=; i<m; i++)
{
scanf("%d%d%d",&a,&b,&c);
mp[a][b]=mp[a][b]>c?c:mp[a][b];
mp[b][a]=mp[a][b];
}
scanf("%d%d",&st,&ed);
if(st == ed)
{
printf("0\n");
continue;
}
Dijkstra(st,n);
if(d[ed] == INF)
{
printf("-1\n");
}
else
{
printf("%d\n",d[ed]);
}
}
return ;
}

Floyd:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm> #define MAXX 210
#define INF 1000000000 int d[MAXX][MAXX]; void Floyd(int n)
{
int i,j,k;
for(k=; k<n; k++)
for(i=; i<n; i++)
for(j=; j<n; j++)
if(d[i][k] + d[k][j] < d[i][j])
d[i][j] = d[i][k] + d[k][j];
} int main()
{
int n,m,i,j;
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=; i<MAXX; i++)
for(j=; j<MAXX; j++)
d[i][j] = INF;
int a,b,c;
for(i=; i<m; i++)
{
scanf("%d%d%d",&a,&b,&c);
d[a][b] = d[a][b] > c ? c : d[a][b];
d[b][a] = d[a][b];
}
int st,ed;
scanf("%d%d",&st,&ed);
if(st == ed)
{
printf("0\n");
continue;
}
Floyd(n);
if(d[st][ed] == INF)
printf("-1\n");
else
printf("%d\n",d[st][ed]);
}
return ;
}

hdu 1874(Dijkstra + Floyd)的更多相关文章

  1. 最短路径:(Dijkstra & Floyd)

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  2. HDU 1874 SPFA/Dijkstra/Floyd

    这题作为模板题,解法好多... 最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习. 暂时只有SPFA和Dijkstra的 SPFA (邻接表版.也可以写成临接矩阵存图,但题目可能给出平行边的,所以 ...

  3. Bomb HDU - 3555 (数位DP)

    Bomb HDU - 3555 (数位DP) The counter-terrorists found a time bomb in the dust. But this time the terro ...

  4. 线段树扫描线(一、Atlantis HDU - 1542(覆盖面积) 二、覆盖的面积 HDU - 1255(重叠两次的面积))

    扫描线求周长: hdu1828 Picture(线段树+扫描线+矩形周长) 参考链接:https://blog.csdn.net/konghhhhh/java/article/details/7823 ...

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

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

  6. ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. poj1847 Tram(Dijkstra || Floyd || SPFA)

    题目链接 http://poj.org/problem?id=1847 题意 有n个车站,编号1~n,每个车站有k个出口,车站的出口默认是k个出口中的第一个,如果不想从默认出口出站,则需要手动选择出站 ...

  8. Poj1062 昂贵的聘礼 (dijkstra算法)

    一.Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长 ...

  9. 0016:单源最短路径(dijkstra算法)

    题目链接:https://www.luogu.com.cn/problem/P4779 题目描述:给定一个 n 个点,m 条有向边的带非负权图,计算从 s 出发,到每个点的距离. 这道题就是一个单源最 ...

随机推荐

  1. 查看lnmp 编译参数

    nginx :版本/opt/local/nginx/sbin/nginx -v 编译参数:/opt/local/nginx/sbin/nginx -V apache:版本/opt/local/http ...

  2. python False

    None 空字符串 空列表 空元组 空字典 false为False

  3. Thinking In Java 读书笔记

    面向对象语言,五个基本特性: 1)万物皆为对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型.即:每个对象都是 ...

  4. Install Hive

    一.Hive将元数据存储在RDBMS中,有三种模式可以连接到数据: 1.single User Mode:此模式连接到一个In-memory的数据库Derby,一般用于Unit Test. 2.Mul ...

  5. pg_dump 备份与恢复的简单操作

    pg_dump 是一个用于备份PostgreSQL数据库的工具.    该工具生成的转储格式可以分为两种,    脚本  :     其中脚本格式是包含许多SQL命令的纯文本格式  (常用)    归 ...

  6. JavaScript脚本语言基础(一)

    导读: JavaScript代码嵌入HTML文档 JavaScript代码运行方式 第一个实例 JavaScript的三种对话框 定义JavaScript变量 JavaScript运算符和操作符 Ja ...

  7. JavaScript脚本语言基础(二)

    导读: JavaScript条件语句 JavaScript循环语句 JavaScript网页中错误捕获 JavaScript的Break和Continue命令 JavaScript的转义字符 1.Ja ...

  8. js命名空间笔记

    在量比较大或者多人编写的情况下,命名冲突就很有可能发生,同一个页面引用了两个命名相同功能不同的文件,调用的时候就会出问题.因此使用JS命名空间很重要. 1.采用字面量方法创建命名空间: var a={ ...

  9. 安装opencv以及遇到的坑

    参考这篇文章: http://www.tuicool.com/articles/36fMnem 还是国外的文章靠谱: http://docs.opencv.org/master/dd/dd5/tuto ...

  10. 电脑能上网,手机连上wifi不能上网

    电脑能上网,手机连上wifi不能上网  ,其实只要把手机的dhcp 改为我们熟悉的就行了 我此处就设置为114.114.114.114