HDU 2544(Floyd、Dijkstra、Bellman-Ford、SPFA)
来源:互联网 发布:高仿包包淘宝哪里买 编辑:程序博客网 时间:2024/06/06 13:16
中文题
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#define N 110#define M 10010#define INF 0x3f3f3f3fusing namespace std;struct edgs{ int u, v, dis;}Edgs[M];int dis[N][N], d[N], vis[N];int u[M], v[M], head[M], Next[M], len[M];int n, m, cnt;void add_edgs(int s, int e, int l) { u[cnt] = s; v[cnt] = e; len[cnt] = l; Next[cnt] = head[s]; head[s] = cnt++;}void init() { memset(dis, 0x3f, sizeof(dis)); memset(head, -1, sizeof(head)); cnt = 0; cnt = 0; int x, y, z; for (int i = 0; i < m; i++) { scanf("%d%d%d", &x, &y, &z); dis[x][y] = dis[y][x] = min(dis[x][y], z); Edgs[i].u = x; Edgs[i].v = y; Edgs[i].dis = min(dis[x][y], z); add_edgs(x, y, min(dis[x][y], z)); add_edgs(y, x, min(dis[x][y], z)); }}int Dijkstra() { memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i++) d[i] = INF; d[1] = 0; for (int i = 0; i < n; i++) { int x, t = INF; for (int j = 1; j <= m; j++) if (!vis[j] && d[j] < t) { x = j; t = d[j]; } vis[x] = 1; for (int j = 1; j <= n; j++) d[j] = min(d[j], d[x] + dis[x][j]); } return d[n];}int Floyd() { for (int i = 1; i <= n; i++) dis[i][i] = 0; for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (dis[i][k] != INF && dis[k][j] != INF && dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = dis[i][k] + dis[k][j]; return dis[1][n];}int Bellman_Ford() { for (int i = 2; i <= n; i++) d[i] = INF; d[1] = 0; for (int i = 1; i <= n - 1; i++) for (int j = 0; j < m; j++) { int u = Edgs[j].u; int v = Edgs[j].v; if (d[u] < INF) d[v] = min(d[v], d[u] + Edgs[j].dis); if (d[v] < INF) d[u] = min(d[u], d[v] + Edgs[j].dis); } return d[n];}int SPFA() { memset(vis, 0, sizeof(vis)); for (int i = 2; i <= n; i++) d[i] = INF; d[1] = 0; queue<int> q; q.push(1); while (!q.empty()) { int t = q.front(); q.pop(); vis[t] = 0; for (int i = head[t]; i != -1; i = Next[i]) { if (d[v[i]] > d[u[i]] + len[i]) { d[v[i]] = d[u[i]] + len[i]; if (!vis[v[i]]) { q.push(v[i]); vis[v[i]] = 1; } } } } return d[n]; }int main() { while (scanf("%d%d", &n, &m) != EOF && n + m) { init();// printf("%d\n", Dijkstra());// printf("%d\n", Floyd());// printf("%d\n", Bellman_Ford()); printf("%d\n", SPFA()); } return 0;}
0 0
- HDU 2544(Floyd、Dijkstra、Bellman-Ford、SPFA)
- HDU-#2544 最短路(Dijkstra、Floyd、Bellman-Ford、SPFA)
- hdu-2544-最短路(Dijkstra + Dijkstra优先队列 + Bellman-ford + SPFA +Floyd) 纯模板题
- HDU 2544 最短路(四种写法:Floyd、Dijkstra、Bellman-Ford、SPFA)
- Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法汇总 HDU 2544为例
- hdu-2544-最短路-(bellman-ford、dijkstra、floyd、SPFA算法)
- Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- Dijkstra、Bellman-ford、SPFA、Floyd算法
- hdu 2544 最短路(Floyd-Warshal,Dijkstra,bellman-ford)
- HDU 1874 畅通工程续 (Floyd, Dijkstra,Bellman-Ford,SPFA)
- 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)
- 最短路(SPFA、Dijkstra、Floyd、Bellman-Ford)
- 最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)
- 最短路模板Dijkstra Bellman-Ford Floyd SPFA
- hdu1874 畅通工程续(Dijkstra/Floyd/Bellman-Ford/SPFA)
- 01. Web开发简介
- js 使用闭包实现单例
- Linux下Tomcat VM参数修改
- Web实际应用中的编码问题
- for语句的执行顺序
- HDU 2544(Floyd、Dijkstra、Bellman-Ford、SPFA)
- Spring学习总结
- Github博客私人订制(一)
- POJ3468 A Simple Problem with Integers 【线段树+lazy】
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! 我同事遇到的问题。 用户名/
- [HDU 2602] Bone Collector 01背包
- CC2541 低功耗
- IOS 应用图片解密工具
- 让spring mvc controller转换date类型