题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544

最近复习了最短路径的算法,就写了4个版本的测试。正好是模板题,就果断A之。。。

Dijkstar版本:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<queue>
#include<algorithm>
using namespace std;#define N 110
#define MAX 999999
#define CLR(arr, what) memset(arr, what, sizeof(arr))int nodenum, edgenum;
int map[N][N], dis[N];
bool visit[N];int Dijkstra(int src, int des)
{int temp, k;CLR(visit, false);for(int i = 1; i <= nodenum; ++i)dis[i] = (i == src ? 0 : map[src][i]);visit[src] = true;dis[src] = 0;for(int i = 1; i<= nodenum; ++i){temp = MAX;for(int j = 1; j <= nodenum; ++j)if(!visit[j] && temp > dis[j])temp = dis[k = j];if(temp == MAX)break;visit[k] = true;for(int j = 1; j <= nodenum; ++j)if(!visit[j] && dis[j] > dis[k] + map[k][j])dis[j] = dis[k] + map[k][j];}return dis[des];
}int main()
{int start, end, cost;int answer;while(~scanf("%d%d", &nodenum, &edgenum) && (nodenum + edgenum)){for(int i = 1; i <= nodenum; ++i)for(int j = 1; j <= nodenum; ++j)map[i][j] = MAX;for(int i = 1; i <= edgenum; ++i){scanf("%d%d%d", &start, &end, &cost);if(cost < map[start][end])map[start][end] = map[end][start] = cost;}answer = Dijkstra(1, nodenum);printf("%d\n", answer);}return 0;
}

Bellman_Ford版本:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<queue>
#include<algorithm>
using namespace std;#define N 110
#define MAX 999999
#define CLR(arr, what) memset(arr, what, sizeof(arr))int nodenum, edgenum;
int map[N][N], dis[N];
bool visit[N];struct Edge
{int u, v;int cost;
}e[N * N / 2];int Bellman_ford(int src, int des)
{for(int i = 1; i <= nodenum; ++i)dis[i] = MAX;dis[src] = 0;for(int i = 0; i < nodenum - 1; ++i) //n-1遍for(int j = 0; j < edgenum * 2; ++j) //each edgeif(dis[e[j].v] > dis[e[j].u] + e[j].cost)dis[e[j].v] = dis[e[j].u] + e[j].cost;return dis[des];
}int main()
{int start, end, cost;int answer;while(~scanf("%d%d", &nodenum, &edgenum) && (nodenum + edgenum)){for(int i = 0; i < edgenum; ++i){scanf("%d%d%d", &start, &end, &cost); //双向边e[i * 2].u = start, e[i * 2].v = end, e[i * 2].cost = cost;e[i * 2 + 1].u = end, e[i * 2 + 1].v = start, e[i * 2 + 1].cost = cost;}answer = Bellman_ford(1, nodenum);printf("%d\n", answer);}return 0;
}

Floyd版本:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<queue>
#include<algorithm>
using namespace std;#define N 110
#define MAX INT_MAX >> 1
#define CLR(arr, what) memset(arr, what, sizeof(arr))int nodenum, edgenum;
int map[N][N], dis[N];
bool visit[N];int Floyd(int src, int des) //多源多汇最短路
{for(int k = 1; k <= nodenum; ++k)for(int i = 1; i <= nodenum; ++i)for(int j = 1; j <= nodenum; ++j)map[i][j] = min(map[i][j], map[i][k] + map[k][j]);return map[src][des];
}int main()
{int start, end, cost;int answer;while(~scanf("%d%d", &nodenum, &edgenum) && (nodenum + edgenum)){for(int i = 1; i <= nodenum; ++i)for(int j = 1; j <= nodenum; ++j)map[i][j] = MAX;for(int i = 0; i < edgenum; ++i){scanf("%d%d%d", &start, &end, &cost);if(cost < map[start][end])map[start][end] = map[end][start] = cost;}answer = Floyd(1, nodenum);printf("%d\n", answer);}return 0;
}

SPFA版本:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<queue>
#include<algorithm>
using namespace std;#define N 110
#define MAX INT_MAX >> 1
#define CLR(arr, what) memset(arr, what, sizeof(arr))int nodenum, edgenum;
int map[N][N], dis[N];
bool visit[N];int SPFA(int src, int des)
{queue<int> q;CLR(visit, false);for(int i = 1;i <= nodenum; ++i)dis[i] = MAX;dis[src] = 0;visit[src] = true;q.push(src);while(!q.empty()){int cur = q.front();q.pop();visit[cur] = false; //出队标记为falsefor(int i = 1; i <= nodenum; ++i){if(dis[i] > dis[cur] + map[cur][i]) //没有2个集合,和Dijkstra有本质区别{dis[i] = dis[cur] + map[cur][i]; //能松弛就松弛if(!visit[i]) //不在队列中则加入,然后更新所有以前经过此点的最短路径{q.push(i);visit[i] = true;}}}}return dis[des];
}int main()
{int start, end, cost;int answer;while(~scanf("%d%d", &nodenum, &edgenum) && (nodenum + edgenum)){for(int i = 1; i <= nodenum; ++i)for(int j = 1; j <= nodenum; ++j)map[i][j] = MAX;for(int i = 0; i < edgenum; ++i){scanf("%d%d%d", &start, &end, &cost);if(cost < map[start][end])map[start][end] = map[end][start] = cost;}answer = SPFA(1, nodenum);printf("%d\n", answer);}return 0;
}

HDU-2544 最短路【最短路】相关推荐

  1. 知识点四 图论:dijkstra (HDU 2544 +HDU 1874)

    dijkstra(狄克斯特拉)知识点 1.可以用于解决最短路问题 2.dijkstra算法在数据量比较小的情况下可以直接开邻接矩阵. 3.不能处理含有负权环的图 对dijkstra算法的理解 dijk ...

  2. 最短路——最短路计数(spfa)

    题目链接 最短路--最短路计数(spfa) 题目描述 给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1-N.问从顶点 1 开始,到其他每个点的最短路有几条. 输入格式 第一行包含 2 个正整 ...

  3. 最短路——最短路(spfa)

    题目链接 最短路--最短路(spfa) 题目描述 简单暴力的题目要求: 给定一个有n个顶点(从1到n编号),m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路. ...

  4. 图论:SPFA 算法详解( 算法竞赛入门到进阶) HDU 2544 链式前向星 【提供ACM模板+图解,不会都难!】

    文章目录 SPFA简介 链式前向星介绍 SPFA算法思路详细 模板-链式前向星 参考书籍:算法竞赛入门到进阶 罗勇军 SPFA简介 用队列处理Bellman-Ford算法可以很好地优化,这种方法叫做S ...

  5. hdu 2544 最短路 (dijkstra)

    http://acm.hdu.edu.cn/showproblem.php?pid=2544 最简单的最短路了吧 改天试试优化版本的 #include<stdio.h> #include& ...

  6. HDU 2544 最短路(各种最短路算法的实现)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目: Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂 ...

  7. hdu 2544最短路(Dijkstra)

    最短路                    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. hdu 2544最短路 Floyd算法

    最短路 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Problem Descrip ...

  9. hdu 2544 最短路 Dijkstra算法

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...

  10. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

最新文章

  1. 艾伟:WCF从理论到实践(11)-异步
  2. 信息学奥赛一本通 1042:奇偶ASCII值判断 | OpenJudge NOI 1.4 04
  3. STM32那点事(2)_时钟树(下)
  4. 关键2招提升软件开发项目的利润
  5. Python-Matplotlib可视化(番外篇)——Matplotlib中的事件处理详解与实战
  6. [bzoj3694]最短路
  7. php缩略图 实例,php生成缩略图后填充白边的代码示例
  8. git太慢时的加速办法,测试有效
  9. Compile warning: Embedded binary's NSExtensionActivationRule is TRUEPREDICATE
  10. 时间格式转化大汇总各种类型
  11. Photoshop教程五:图层混合模式
  12. PHP基础知识系统复习
  13. 郭霖老师的组合模式讲解
  14. Facebook CTF 2019 Products Manager
  15. 中国大学MOOC-陈越、何钦铭-数据结构-2016秋期末考试
  16. ACL and SCO
  17. 智学网显示服务器开小差了,怎样才能进入智学网,检视孩子的学习成绩?
  18. 视频直播嵌入企业微信公众号的方法
  19. BNUOJ 51277 魔方复原(模拟、置换)
  20. 精选 2021 年大厂高频 Java 面试真题集锦(含答案),面试一路开挂

热门文章

  1. 如何进阶Java之道?首先得知道层层递进的四种软件架构
  2. 根据公式计算圆周率PI
  3. Metasploit学习笔记(七)——Meterpreter后渗透之传统MS08-067漏洞利用(没成功)
  4. 记 · 再看 · 前端社区氛围
  5. Mysql error 1045的解决
  6. 玩转华为ENSP模拟器系列 | 配置BGP EVPN
  7. python输出用逗号隔开的数字_python,得出一些数字后,怎样不输出最后一个逗号...
  8. html输入时提示文字消失,inpuhtml文本框代码t 初始里边有文字提示 当点击时 文字消失 怎么设置...
  9. 《推荐算法工程师培养计划》
  10. 微商必备6款软件!十分好用