2019独角兽企业重金招聘Python工程师标准>>>

/*
Dijkstra算方法(时间复杂度O(n^3))
此程序实现由无向图找到源v0到其他节点的最短路径
*/
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define Member 9
#define MAXINT 65535
typedef int shortpath_weight[Member];       //储存V0到各个节点的最短路径的权重和
typedef int shortpath_pre[Member];          //存储最短路径的前驱,如shortpath_pre[1]=5;就表示v0到v1的最短路径中,v1的前驱是v5
void shortest_Dijkstra(Mgraph G,int v0,shortpath_weight *D,shortpath_pre *P)
{int final[Member];//用final记录一个是否已找到v0到这个节点的最短路径int i=0,j=0,k=0;
//初始化for(i=0;i<G.Nodenum;++i){final[i]=0;(*D)=G.matrix[v0][i];(*P)=0;}(*D)[v0]=0;final[v0]=1;//主循环for(i=0;i<G.Nodenum-1;++i){//找到下一个最短路径节点for(j=0;j<G.Nodenum;++j){if(!final[j]&&(*D)[j]<min){min=(*D)[j];k=j;}}final[k]=1;//由最新找到的节点,更新V0到未找到的最短路径节权值和,以及这些节点在V0到它们的最短路径的前驱for(j=0;j<G.Nodenum;++j){if(!final[j]&&(min+G.matrix[k][j])<(*D)[j]){(*D)[j]=min+G.matrix[j];(*P)[j]=k;}}}
}

Floyd算法:找到图中所有节点到其他所有节点的最短路径

思路:由图的矩阵,使任意两个节点都通过节点0,如果(*D)[m][n]>(*D)[m][0]+(*D)[0][n],则更换(*D)[m][n]的值,更换一次矩阵之后,使任意两个节点都通过1(注意此时矩阵已经更新过通过节点0,顾此时的比较相当于,两个节点可以任意通过节点0或者1或者它们的组合的情况下的最短路径值),依次比较通过节点2,3,4.。。。。。最后就是两个节点通过任意节点组合的最短路径

typedef int shortpath_weight[Member][Member]
typedef int shortpath_later[Member][Member]//注意此处用later是因为,此时的矩阵P[2][5]=3表示的是2到5 的话要先经过3,于是再看p[3][5]=4的话,就是2->3->4->....->5void ShortestPath_Floyd(Mgraph G,shortpath_weight *D,shortpath_later *P)
{int v,w,k;//初始化for(v=0;v<G.Nodenum;++v){for(w=0;w<G.Nodenum;++w){(*D)[v][w]=G.matrix[v][w];(*P)[v][w]=w;}}//计算最短路径以及路径矩阵for(k=0;k<G.Nodenum;++k){for(v=0;v<G.Nodenum;++v){for(w=0;w<G.Nodenum;++w){if((*D)[v][w]>(*D)[v][k]+(*D)[k][w]){(*D)[v][w]=(*D)[v][k]+(*D)[k][w];(*P)[v][w]=(*D)[v][k];}}}}
}

转载于:https://my.oschina.net/bovinitwo/blog/653114

最短路径Dijkstra算法实现和Floyd算法实现相关推荐

  1. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

  2. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  3. 算法入门 17.Floyd算法

    //Floyd算法 #include<iostream> using namespace std; const int maxn=10010; int dp[maxn][maxn]; in ...

  4. 单源最短路径-Dijkstra(迪杰斯特拉算法)

    迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...

  5. 最短路径——Dijkstra算法与Floyd算法

    最短路径 Dijkstra算法 C语言代码实现 代码解析 Floyd算法 算法解析 C语言代码实现 最短路径问题 最短路径问题是我们经常会面临的一种决策问题.在图论中,非网图(边没有权值)的最短路径就 ...

  6. 最短路径——Floyd算法HDU Today(hdu2112)

    最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径. 算法具体的形式包括: 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题. 确定终点的 ...

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

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

  8. 关于Floyd算法 和 Dijkstra算法

    Floyd和Dijkstra算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法,不同点在于Floyd算法求加权图中所有顶点之间的最短路径; Dijkstra算法在求一点到其他所 ...

  9. Floyd算法、Dijkstra算法例题

    二 1.用Floyd算法求解下图各个顶点的最短距离. 2.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径. 2.解析 1)用Floyd算法求解各个顶点的最短距离. 第一步:画出初始化距离 ...

  10. Dijkstra算法、Floyd算法的区别与联系,并由此谈到greedy和DP

    首先,Dijkstra算法与Floyd算法都是广度优先搜索的算法.都可以用来求单源点到其他所有点的最短路径.那么这两者的原理分别是怎样?彼此又有什么区别呢? 求此有向图中起点1到其他所有点的最短距离 ...

最新文章

  1. 自动调度GPU的卷积层
  2. Python广度优先查找和深度优先查找(内附python教程分享)
  3. 前端工程师的mysql笔记
  4. c 反编译工具_App安全检测实践基础——工具篇
  5. 异常:”未处理System.TypeLoadException“
  6. 以列表形式输出_04 Python之列表、集合和字典的推导式
  7. 简单易懂的 pwnable.kr 第一题[fd]Writeupt
  8. Eclipse变量名自动补全问题 自定义上屏按键为TAB
  9. 华为否认降低手机产量传闻:全球生产水平正常 无明显调整
  10. AI软件制作莫比乌斯环
  11. Jenkins+maven(testng)项目(本地项目配置)
  12. 简短介绍_中秋节的由来故事简短100字 中秋节的起源中秋节的来历介绍
  13. mybatis xml配置
  14. ogg格式怎么转mp3格式?
  15. Scade Suite开发 ARINC 661 (2)Scade Suite基本操作
  16. java实现简单泡泡屏保动画及点击变实心泡泡
  17. python选题背景_选题背景和意义
  18. Android 应用进程保活APP常驻内存研究方案
  19. 调用ArcGIS Server的GP服务,显示No JSON object could be decoded要怎么解决?
  20. 使用指针实现strcpy函数的功能

热门文章

  1. caffe 利用python绘制loss曲线以及accuracy曲线
  2. 学而思编程python软件怎么样_学而思编程社区缺点详细分析
  3. byte 类型_Go 语言string 也是引用类型
  4. hypopg1.3.0 使用-常用命令
  5. 如何解决js引入混乱_做个笔记,图片如何实现懒加载(LazyLoad按需加载)
  6. Linux安装Django
  7. IDEA 使用和问题总结
  8. Android 属性动画(三)
  9. 20175212 《Java程序设计》第2周学习总结
  10. Boundary Representations