目录

1.基础

2.单源最短路径——Dijikstra算法

3.所有顶点间的最短路径——Floyd算法

1.基础

2.单源最短路径——Dijikstra算法

思路

void ShortestPath_Dijkstra(MGraph G, int v0, Pathmatirx* p, ShortPathTable* D)
{int v, w, k, min;int final[MAXVEX];  //final[w]=1表示求得顶点v0至vw的最短路径for (v = 0; v < G.numVertexes; v++)  //初始化数据{final[v] = 0;           //全部顶点初始化为未知最短路径状态(*D)[v] = G.matirx[v0][v];  //将与v0点有连线的顶点加上权值(*p)[v] = 0;            //初始化路径数组p为0}(*D)[v0] = 0;               //v0至v0路径为0final[v0] = 1;              //v0至v0不需要求路径//开始主循环,每次求得v0到某个v顶点的最短路径for (v = 1; v < G.numVertexes; v++){min = INFINITY;         //当前所知离v0顶点的最近距离for (w = 0; w < G.numVertexes; w++) //寻找离v0最近的顶点{if (!final[w] && (*D)[w] < min){k = w;min = (*D)[w]; //w顶点离v0顶点更近}}final[k] = 1;          //将目前找到的最近的顶点置为1for (w = 0; w < G.numVertexes; w++)  //修正当前最短路径及距离{//如果经过v顶点的路径比现在这条路径的长度短的话if (!final[w] && (min + G.matrix[k][w] < (*D)[w])){//说明找到了更短的路径,修改D[w]和p[w](*D)[w] = min + G.matirx[k][w];//修改当前路径长度(*p)[w] = k;}}}
}

3.所有顶点间的最短路径——Floyd算法

typedef int Pathmatirx[MAXVEX][MAXVEX];
typedef int ShortPathTable[MAXVEX][MAXVEX];//Floyd算法,求网图G中各顶点v到其余项点w最短路径p[v][w]及带权长度D[v][w]
void ShortestPath_Floyd(MGraph G, Pathmatirx* p, ShortPathTable)
{int v, w, k;for (v = 0; v < G.numVertexes; ++v)//初始化D与P{for (w = 0; w < G.numVertexes; ++w){(*D)[v][w] = G.matirx[v][w];  //D[v][w]值即为对应点间的权值(*p)[v][w] = w;               //初始化P}}for (k = 0; k < G.numVertexes; ++k){for (v = 0; v < G.numvERTEXES; ++v){for (w = 0; w < G.numVertexes; ++w){if ((*D)[v][w] > (*D)[v][k] + (*D)[k][w]){//如果经过下标为k顶点路径比原两点间路径更短//将当前两点权值设为更小的一个(*D)[v][w] = (*D)[v][k] + (*D)[k][w];(*p)[v][w] = (*p)[v][k];//路径设置经过下标为k的顶点}}}}
}

for(v = 0; v < G.numVertexes; ++v)
{for (w = v + 1; w < G.numVertexes; w++){printf("v%d-v%d weight: %d", v, w, D[v][w]);k = P[v][w];              //获得第一个路径顶点下标printf(" path: %d",v);    //打印源点while (k != w)            //如果路径顶点下标不是终点{printf(" -> %d",k);   //打印路径顶点k = P[k][w];          //获得下一个路径顶点下标}printf(" -> %d\n",w);     //打印终点}printf("\n");
}

最短路径:Dijikstra算法/Floyd算法相关推荐

  1. 最短路径问题(Floyd算法、Dijkstra算法、Bellman-Ford算法、SPFA算法)

    导入 最短路径问题是指在一幅带权图中,找出连接两个顶点之间的所有路径中,边权和最短的那一条.如下图就是一幅带权图,边上的数字就代表该边的权值.解决最短路径问题有多种不同的算法,本文将对它们的基本思想与 ...

  2. 03 最短路 dijkstra算法spfa算法floyd算法(附带实例代码) 图论-1

    文章目录 最短路 邻接表的图如下 邻接矩阵如下图 链表实现邻接表实现代码 单源最短路径 Dijkstra 算法 朴素版本 Dijkstra 实现代码 堆优化的dijkstra算法代码实现 Bellma ...

  3. 短小精悍的多源最短路径算法—Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  4. [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]

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

  5. 最短路径算法——迪杰克斯拉算法/floyd算法

    最短路径算法--迪杰克斯拉算法 Dijkstra算法的思想 1.设置两个顶点集S和T,集合S中存放已经找到最短路径的顶点,集合T中存放着当前还未找到最短路径的顶点: 2.初始状态下,集合S中只包含源点 ...

  6. 最短路最基本算法———Floyd算法

    关于floyd算法 算法简介 实现思想 核心代码 后记 一.floyd简介 引自百度百科 在计算机科学中,Floyd-Warshall算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路 ...

  7. 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解

     本文链接   :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...

  8. 只有5行的算法——Floyd算法

    Floyd算法 Floyd 的特别之处 算法设计 完整代码 相关题目 之前写了一篇Dijkstra算法详解,那是在趣学算法上的,不过却没在其中找到Floyd,现在这篇文章是啊哈算法里的Floyd算法讲 ...

  9. 最短路算法----floyd算法

    目录 1:Floyd算法的介绍 2:Floyd算法的代码展现 3:Floyd算法举例 1:Floyd算法的介绍 Floyd算法是属于最短路算法的一种,它是用来求多源最短路径,换句话来说就是求任意两个点 ...

最新文章

  1. 实战:使用 Python 和 OpenCV 创建自己的“CamScanner”
  2. Python与Cisco的事儿之四
  3. 怎么UI数组惊醒初始化 c语言,C语言教案7-数组.ppt
  4. 2020计算机考研准备,2020考研:什么时候开始准备考研最合适?
  5. iOS对UIViewController生命周期和属性方法的解析
  6. OpenGL 四边形渲染的实例
  7. C#获取容器窗体中控件Location问题
  8. 前端处理跨域的几种方式
  9. IIS和Tomcat共用80端口的解决方案
  10. 【渝粤教育】国家开放大学2018年春季 3818-21T燃气工程施工 参考试题
  11. [第八章] 深入理解计算机系统第三版 家庭作业参考答案
  12. cad查看_CAD干货:手把手教你如何在手机上查看CAD图纸,赶紧了解一波~
  13. 转:如何在Ubuntu系统下安装使用LaTeX
  14. linux vga 分辨率低,通过 VGA 接口连接显示器时分辨率不正确
  15. 中继 并发量_潮流UCM6102 IP PBX 支持500门分机 双外线 30个并发数
  16. J9数字论:如何避免踩雷多头陷阱?
  17. 雷电2接口_中国连城 | 总结关于USB、TypeC、雷电接口的冷知识
  18. 个人开发者一分钟接入微信支付宝支付
  19. camera--(2)双摄的作用
  20. 小家伙的第一次露营体验

热门文章

  1. buffer pool详解(free链表+flush链表+lru链表)
  2. AI 将完全取代前端开发吗?
  3. Mysql5.1安装与配置(win7-x64)
  4. Java 中Calendar、Date、SimpleDateFormat学习总结
  5. c语言变量是如何存储,C语言变量存储
  6. 查看mysql临时密码_MySQL修改密码,查看MySQL临时密码
  7. leetcode简单之597.好友申请I:总体通过率
  8. iWO联通3G详单及套餐使用情况查询工具)更新至v0.8.4
  9. 这嘎哒真TM那啥!Python版东北话编程火爆网络
  10. 出行必备 酷讯全面锁定“秒杀票”