题目

输入顶点数N,有向边数M,接下来M行输入格式为u,v,w分别代表两个顶点u,v和两点之间边的权值w。输出全源最短路径
输入样例
6 8
0 1 1
0 3 4
0 4 4
1 3 2
2 5 1
3 2 2
3 4 3
4 5 3
输出样例
0 1 5 3 4 6
1073741823 0 4 2 5 5
1073741823 1073741823 0 1073741823 1073741823 1
1073741823 1073741823 2 0 3 3
1073741823 1073741823 1073741823 1073741823 0 3
1073741823 1073741823 1073741823 1073741823 1073741823 0

暴力Dijkstra算法代码

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
const int maxn = 105;
const int inf = 0x3fffffff;
int N, M;//N个顶点,M条边
DWORD startTime, endTime;
struct Node{int v;int dist;Node(){}Node(int vv, int dd){v = vv;dist = dd;}
};
vector<Node> G[maxn];//有向有权边
bool vis[maxn];
int d[maxn];//存储最短距离
void init()
{for(int i = 0; i < N; ++i){vis[i] = false;d[i] = inf;}
}
//源点s
void Dijkstra(int s)
{init();d[s] = 0;for(int i = 0; i < N; ++i){int u, udist, mindist = inf;for(int j = 0; j < N; ++j)//寻找d[]最小值 {if(!vis[j] && d[j] < mindist){u = j;udist = mindist = d[j];}}vis[u] = true;for(int k = 0; k < G[u].size(); k++){int v = G[u][k].v;int vdist = G[u][k].dist;if(!vis[v] && udist + vdist < d[v]){d[v] = udist + vdist;}}}
}
int main(int argc, char *argv[]) {scanf("%d%d", &N, &M);for(int i = 0; i < M; ++i){int u, v, w;//边uv,点u与点v之间的边,权值为wscanf("%d%d%d", &u, &v, &w);Node node = Node(v, w);G[u].push_back(node);}startTime = GetTickCount();for(int i = 0; i < N; ++i){Dijkstra(i);for(int i = 0; i < N; ++i)printf("%d ", d[i]);printf("\n");}endTime = GetTickCount();cout << endTime - startTime << "ms" << endl;return 0;
}

暴力Dijkstra算法速度

Floyd算法代码

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
const int maxn = 105;
const int inf = 0x3fffffff;
int N, M;//N个顶点,M条边
DWORD startTime, endTime;
struct Node{int v;int dist;Node(){}Node(int vv, int dd){v = vv;dist = dd;}
};
vector<Node> G[maxn];//有向有权边
int d[maxn][maxn];//存储最短距离
//源点s
void Floyd()
{for(int k = 0; k < N; ++k){for(int i = 0; i < N; ++i){for(int j = 0; j < N; ++j){if(d[i][k] != inf && d[k][j] != inf && d[i][k] + d[k][j] < d[i][j]){d[i][j] = d[i][k] + d[k][j];}}}}
}
int main(int argc, char *argv[]) {scanf("%d%d", &N, &M);for(int i = 0; i < N; ++i){for(int j = 0; j  < N; ++j){d[i][j] = inf;}}for(int i = 0; i < N; i++){d[i][i] = 0;//顶点i到顶点i的距离是0 }for(int i = 0; i < M; ++i){int u, v, w;scanf("%d%d%d", &u, &v, &w);d[u][v] = w;}startTime = GetTickCount();Floyd();for(int i = 0; i < N; ++i){for(int j = 0; j < N; ++j){printf("%d ", d[i][j]);}printf("\n");}endTime = GetTickCount();cout << endTime - startTime << "ms" << endl;return 0;
}

Floyd算法速度

图论-全源最短路径-对比Floyd算法与暴力Dijkstra算法相关推荐

  1. 动态规划在求解全源最短路径中的应用(JAVA)--Floyd算法

    参考图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA ) 这种算法也叫Floyd-Warshell算法,虽然和Warshell算法名字相近,算法思想也 ...

  2. Johnson 全源最短路径算法 Java实现

    Johnson 全源最短路径算法 Java实现 算法导入 算法核心 复杂度分析 时间复杂度 空间复杂度 代码实现 参考资料 End 算法导入 在之前的文章中,我们讲述了: 经典入门的Dijkstra算 ...

  3. 自动寻路算法python_关于Dijkstra算法和其他的一些图算法(Johnson, Floyd-Warshall, A*)解决最短路径问题的方法的Python实现。...

    这篇文章其实主要想说的是如何解决最短路径的问题. 其实最短路径问题,我们在生活中都在不知不觉的使用.比如我们在上网的时候,互联网传输采用了各种各样的数据包路由方法.这些路由算法都在幕后工作. 还有一些 ...

  4. 最短路——【模板】单源最短路径(弱化版)(dijkstra)

    题目链接 最短路--[模板]单源最短路径(弱化版)(dijkstra) 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行包含三个整数 n,m,s,分别表示点 ...

  5. 图论-单源最短路径算法(拓扑,Dijkstra,Floyd,SPFA)

    前言 单源最短路径是学习图论算法的入门级台阶,但刚开始看的时候就蒙了,什么有环没环,有负权没负权,下面就来总结一下求单源最短路径的所有算法以及其适用的情况. 单源最短路径 设定图中一个点为源点,求其他 ...

  6. 全源最短路径之弗洛伊德算法(C语言)

    Floyd(弗洛伊德)算法 该算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包. 时间复杂度为 O(N^3) 空 ...

  7. 最短路径:Dijkstra算法(求单源最短路径)Floyd算法(求各顶点之间最短路径)

    最短路径: 在一个带权图中,顶点V0到图中任意一个顶点Vi的一条路径所经过边上的权值之和,定义为该路径的带权路径长度,把带权路径最短的那条路径称为最短路径. DiskStra算法: 求单源最短路径,即 ...

  8. 【数据结构笔记24】单源最短路(迪克斯拉Dijkstra算法),多源最短路(弗洛伊德Floyd算法)

    本次笔记内容: 7.1.1 概述 7.1.2 无权图的单源最短路 7.1.3 有权图的单源最短路 7.1.3-s 有权图的单源最短路示例 7.1.4 多源最短路算法 文章目录 最短路径问题 最短路径问 ...

  9. 图论总结(欧拉路+Floyd所有结点最短+Bellman-Ford算法+SPFA+Dijsktra算法+Tarjan算法+最小生成树(prim+kruskal) )

    目录 欧拉路 判断欧拉路是否存在: ​​​​​​​ 最短路: Floyd算法 : ​​​​​​​​​​​​​​ Bellman-Ford: ​​​​​​​ Dijkstra 单源最短路 先附上例题: ...

最新文章

  1. 法国电子与计算机信息学校排名,法国电气与电子工程专业大学排名(2020年上交大)_快飞留学...
  2. 9.使用原生js实现类似于jquery的动画
  3. android 中radiogroup滑动切换,巧妙实现缺角radiogroup控制多个fragment切换和滑动
  4. python-装饰器简介
  5. 编程的第一步都要使能时钟吗_在您的第一份编程工作中要做的11件事
  6. 发展需要大师,繁荣更需批评——GIS现状堪忧
  7. 数据结构与算法(python版)
  8. 甘肃省事业单位公考招聘考试权威复习资料---GIS专业综合复习题(一)
  9. html设置抽奖概率,js设置概率随机数(可用于抽奖,砍价的逻辑应用)
  10. qtdesigner设计表格_使用Qt Designer进行布局
  11. python软著申请_软著申请注意事项放心选择
  12. GNSS/INS超紧组合、深组合导航数据采集器
  13. 孩子为什么不愿意再跟家长沟通?家长该怎么办
  14. webstrom怎么配置git并提交
  15. matlab程序算天气,科学网-站点气温数据的积温计算(含Matlab程序实现)-朱永超的博文...
  16. 【Unity】Unity中的异步编程技术详解
  17. 信息孤岛影响_OKR如何打破组织的孤岛
  18. fs.readFile和fs.readFileSync的区别
  19. qt中QPushbutton出现保持按下的效果并且出现一组中同时出现互斥的效果
  20. 高等数学 —— 无穷小与无穷大

热门文章

  1. python2和python3一些不同
  2. 弥勒“甘丝蜜朵”旅游地产策划规划方案
  3. matlab求方程实根,matlab怎么求方程的根
  4. 当你想通了,工作就顺了
  5. 20170704总结
  6. .Net写的Mail Util(C#)
  7. 2016年PMP考试时间安排
  8. google专利的脚步
  9. “千年虫”是什么东西?一个在计算机诞生之初,遗留下的巨大 BUG!
  10. ONVIF系列笔记-设备发现机制