鉴于之前我看到过非常好的博客,如果自己总结的话,大多也是按照别的博主的思路来解释,所以就直接推荐给大家这些优秀的博客;
Dijkstra:最短路径dijkstra算法精品代码(超详解)
Floyd:Floyd 算法最短路径问题精品(超详解)

关于代码模板,我还是想展示自己的模板,毕竟自己的用着才是最舒服的(其实都大同小异,自己写一遍才能成为自己的东西)

Dijkstra模板:

#include <bits/stdc++.h>using namespace std;
const int maxx=1e3+7;
#define INF 0x3f3f3f3f
int dist[maxx];
int c[maxx][maxx];
int s[maxx];
int v,e,n,m;
void init()
{memset(dist,INF,sizeof dist);//源点到所有点的最短距离初始为无穷大memset(c,INF,sizeof c);memset(s,0,sizeof s);
}
void dijkstra()
{for(int i=1;i<=n;i++) dist[i]=c[v][i];//找到与源点直接相连接的点,并且更新distdist[v]=0;//源点到自己本身距离为0s[v]=1;//首先把源点标记for(int i=2;i<=n;i++){int temp=INF;int u=v;for(int j=1;j<=n;j++)//找到与源点直接相连,并且距离最小的点{if(!s[j]&&dist[j]<temp){u=j;temp=dist[j];}}s[u]=1;//将这个点标记(证明以后可以使用这个点作为中间点了)for(int j=1;j<=n;j++){if(!s[j]&&c[u][j]<INF)//然后从u的周围找到一个直接相连并且没有使用过的点{int newdist=dist[u]+c[u][j];//然后判断使用这个点是否能使距离变小,是的话就更新if(newdist<dist[j])dist[j]=newdist;}}}
}
int main()
{while(scanf("%d %d",&n,&m)&&n&&m){init();//初始化数组;int x,y,t;for(int i=1;i<=m;i++)cin>>x>>y>>t,c[x][y]=t,c[y][x]=t;//存图v=1,e=n;dijkstra();cout <<dist[n]<<endl;}return 0;
}

带路径输出的Dijkstra
最短路径(dijkstra)以及输出路径
.
.
.

Floyd模板:

#include <iostream>
#include <cstring>
#include <cstdio>using namespace std;
#define INF 0x3f3f3f3f
const int maxx=1e3+7;
int G[maxx][maxx];//存图数组
int path[maxx][maxx];//path[i][j]记录从i到j经过了那个点过来的
int n,m;//分别表示定点个数和边的个数
void init()
{memset(G,INF,sizeof G);//初始化数组memset(path,-1,sizeof path);for(int i=0;i<maxx;i++)//到自己的距离为0G[i][i]=0;
}
void Floyd()
{                          //三重循环for(int k=1;k<=n;k++){ //选中的中间值 for(int i=1;i<=n;i++){ //数组横坐标for(int j=1;j<=n;j++){ //数组纵坐标 if(G[i][j]>G[i][k]+G[k][j]){    //如果以k中间点为中间点检测到路径更短 G[i][j]=G[i][k]+G[k][j];    //更新路径值path[i][j]=k;   //更新要经过的中间点 }}}}
}
int main()
{while(scanf("%d %d",&n,&m)&&n&&m){init();//初始化int x,y,z;for(int i=0;i<m;i++){scanf("%d %d %d",&x,&y,&z);G[x][y]=z,G[y][x]=z;}Floyd();printf("%d\n",G[1][n]);//输出点1到点n的最短距离}return 0;
}

.

带路径输出的Floyd只需要添加一个自己写的函数即可:

void ptf(int u,int v)
{cout <<u<<"->";while(path[u][v]!=-1){u=path[u][v];cout <<u<<"->";}cout <<v<<endl;
}

.
.
.

Dijkstra算法和Floyd算法的区别之处:

Dijkstra算法和Floyd算法对比分析

总结来说就是

1.

Dijkstra不能处理负权图,Flyod能处理负权图;

2.

Dijkstra处理单源最短路径
Flyod是处理多源最短路径
这个区别有个博主写的特别好,生动又形象,来吧!传送门:最短路径——Dijkstra算法和Floyd算法

3.

Dijkstra时间复杂度为O(n^2)
Flyod时间复杂度为O(n^3) 空间复杂度为O(n ^ 2);
所以题目中如果是单源点正权图,就用Dijkstra
如果是任意两个点之间的最短路径或者是负权图,就用Floyd;

Dijkstra算法和Floyd算法超详解以及区别相关推荐

  1. 数据结构与算法—最小生成树(Prim算法和Kruskal算法算法详解)

    前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚.我们看下百度百科对于最小生成树定义: 一个有 n 个结点的连通图的生成树 ...

  2. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

  3. 【Java数据结构与算法】第二十章 Dijkstra算法和Floyd算法

    第二十章 Dijkstra算法和Floyd算法 文章目录 第二十章 Dijkstra算法和Floyd算法 一.Dijkstra算法 1.介绍 2.代码实现 二.Floyd算法 1.介绍 2.代码实现 ...

  4. DP之Warshall算法和Floyd算法

    DP之Warshall算法和Floyd算法 上2篇详细分析了动态规划的一些理解,传统的教材上就大概说了下空间换时间,记忆以避免重复计算等. 然后我们在文章中深入的分析和解释了交叠子问题是怎么表现的,最 ...

  5. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  6. php计算股票均线,均线怎么算?均线的计算方法详解

    均线怎么算?均线的计算方法详解 学习股票知识首先需要了解各大技术指标,股票均线是最常用的技术指标,新股民学习股票均线肯定有很多不了解的地方,今天股票知识就给大家讲解一下股票均线是怎么来的? 日均线的计 ...

  7. 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法

    一.名称 动态规划法应用 二.目的 1.掌握动态规划法的基本思想: 2.学会运用动态规划法解决实际设计应用中碰到的问题. 三.要求 1.基于动态规划法思想解决背包问题(递归或自底向上的实现均可): 2 ...

  8. 巅峰战舰今日服务器全部维护,巅峰战舰12月7日更新维护公告 12.7新增玩法和舰船属性调整详解[图]...

    类型:策略卡牌 大小:827.38MB 评分:10 平台: 巅峰战舰今天进行了临时维护更新,具体更新了什么内容?估计小伙伴们不太清楚,没关系,下面是小麦整理出来的12.7新增玩法和舰船属性调整详解,希 ...

  9. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

最新文章

  1. 清华北大亚洲第一第二!就在刚刚,2020 泰晤士亚洲大学排名公布!
  2. Comet OJ - 2019 六一欢乐赛
  3. LeetCode MySQL 1241. 每个帖子的评论数
  4. 那些大学简称背后的“爱恨情仇”:东西南北中,就剩北大没人抢了
  5. ​【文末有福利】连续型随机变量及实例详解
  6. JavaScript性能优化【中】-- Performance 工具
  7. Codeforces976E Well played! 【贪心】
  8. c# 对象 与 Json串 转换
  9. SQL Sever 创建视图
  10. 华为USG6000防火墙安全策略配置实例(CLI方式)
  11. 右手定则判断向量积的方向
  12. GBIT51231-2016装配式混凝土结构建筑技术标准
  13. 动态页面抓取超级指南_减少页面重量的完整指南
  14. 修复音频服务器,以上就是Win7系统如何修复音频服务未运行的具体方法
  15. 【STM32L552ZET6QU】小白入门资料汇总
  16. 如何用WGDI进行共线性分析(一点五)
  17. [Vue.js] 一篇超级长的笔记,给《Vue.js 实战》划个重点
  18. 数据治理与数据安全研读开篇
  19. [附源码]Java计算机毕业设计SSM高校心理咨询管理系统
  20. 1.1JVM内存结构——堆、栈、方法区、直接内存、堆和栈区别

热门文章

  1. nps内网穿透服务器搭建教程(阿里云)-小宇特详解
  2. Python解二元一次方程
  3. 规范小区电瓶车充电桩的分布保障充电安全
  4. android中接口的作用是什么意思,详解Android接口Interface的使用和意义
  5. unity2D动画-角色切片与2DAnimation插件做动画
  6. linux共享实体机硬盘,实现目录共享
  7. 深拷⻉和浅拷⻉区别是什么?
  8. 斯皮尔 皮尔森 肯德尔_失焦图像的无参考质量评价
  9. 清橙A1210. 光棱坦克
  10. C语言编程--根据麦克劳林公式计算任意角的正弦余弦