1、首先上图哈:图的邻接矩阵表示。

2、图的最短路径

#include<stdio.h>#define MAX 10000
#define N 6//每个定点到其它顶点的直线距离
int G[N][N]=
{{MAX,MAX,10,MAX,30,100},{MAX,MAX,5,MAX,MAX,MAX},{MAX,MAX,MAX,50,MAX,MAX},{MAX,MAX,MAX,MAX,MAX,10},{MAX,MAX,MAX,20,MAX,60},{MAX,MAX,MAX,MAX,MAX,MAX}
};
//p表示到达这个点的最短距离路径上的节点
int p[N][N] =
{//先给他们初始状态//v0到v可通的就将其下标存起来//v0->v0没意义{0,0,0,0,0,0},//v0->v1不可通{0,0,0,0,0,0},//v0->v2可通,{0,2,0,0,0,0},{0,0,0,0,0,0},{0,4,0,0,0,0},{0,5,0,0,0,0}
};void main(){//定义距离数组,把求出来的//v0到其它点的最短距离都存放在这里。int d[N] = {MAX,MAX,10,MAX,30,100};//要计算v0到每个点的最短距离//方法:遍历除v0之外的所有顶点N遍(最外层i循环),//每一遍都找出一个最短距离和经过这个顶点的间接最短距离//并且赋值到相应的距离里去。//如果能取出比他更短的,否则就以其原来作为最短距离int flag[N] = {0};int i,v,min,k,j;//一共循环N次for(i=0;i<N;i++){//首先找出v0出发直线距离最短的//min存储了v0到其它点的最短距离//v存储了最短距离对应的顶点。for(k=0,min = MAX,v = 0;k<N;k++){if(flag[k] != 1 && d[k]<min){min = d[k];v = k;}}//将这个最短距离存到v对应的节点里去d[v] = min;//已经算出最短距离的标志为1//在其它循环当中进行排除。flag[v] = 1;//开始求间接距离最短for(k=0;k<N;k++){//还没有求出最短距离,//且原来最小的v0到v的直线距离//值加上v到k的距离要比直线距离来的小//说明d[k] 有更小的了。if(flag[k] != 1 && min + G[v][k]<d[k]){d[k] = min + G[v][k];//有些顶点是经过了两个或多个中间节点的//所以要把p[k][0]作为标志if(p[k][0] == 0){//如果没设置过p[k][0] = 1;//是经过v到达k的,所以:p[k][1] = v;p[k][2] = k;}else{//如果设置过了for(j=1;p[v][j];j++)p[k][j] = p[v][j];p[k][j] = k;}}}}//打印出距离for(i=0;i<N;i++)printf("%5d",d[i]);printf("\n");//打印最短距离经过的节点for(i=1;i<N;i++){printf("v0->v%d:::",i);for(j=1;j<N;j++)printf("%5d",p[i][j]);printf("\n");}getchar();
}

我们可以看下运行的结果

是不是还不理解外层循环到底做了什么?

v到底变了没有?

让我们来调试一下:

现在来看看下面的一个for(k)是干什么的。。

大功告成!OK。。。

转载于:https://www.cnblogs.com/shenerguang/archive/2012/01/21/2328619.html

学习图(最短路径)算法相关推荐

  1. Dijkstra最短路径算法C++带图详解

    一.问题定义 求解单元点的最短路径问题:给定带权有向图G和源点v,求v到G中其他顶点的最短路径 限制条件:图G中不存在负权值的边 二.思想 划重点,迪杰斯特拉最最朴素的思想就是按长度递增的次序产生最短 ...

  2. 读书笔记(python)--图及其算法

    限于笔者技术水平,文章可能存在错漏,请各位不吝赐教,笔者会尽快改正 文章目录 前言 一.图的术语与实现 二.宽度优先(BFS)与深度优先(DFS) 1.一个简单的图 2.BFS代码 3.DFS代码 4 ...

  3. 数据结构与算法--图论最短路径算法应用-词阶求解

    最短路径案例 词梯应用,在一个词梯中,每个单词均由前一个单词改变一个字母而得到.例如,我们通过一系列单字母替换而得到zero转换为five,如下:five:zero,hero,here,hire,fi ...

  4. 离散数学课本上的最短路径算法

    Dijkstra算法是一个经典的算法--他是荷兰计算机科学家Dijkstra于1959年提出的单源图最短路径算法,也是一个经典的贪心算法.所谓单源图 是规定一个起点的图,我们的最短路径都是从这个起点出 ...

  5. A*地图最短路径算法

    一.简介 A*最短路径算法可以说是最为高效的地图最短路径搜索算法之一,也是目前用的比较广的地图最短路径搜索算法.说起地图最短路径搜索,第一映像就是广度优先搜索,遍历地图中所有可通的,找出最短的路径,但 ...

  6. 算法学习(10):LeetCode刷题之Dijkstra最短路径算法

    前言: 迪杰斯特拉(Dijkstra)最短路径算法是求有向加权图中某个节点到其他节点的最短路径."图"这种数据结构的具体实现就是"邻接矩阵"或者"邻接 ...

  7. 【Python学习系列二十六】networkx库图最短路径求解

    场景:基于python库networkx来求解图最短路径,相关算法基础参考 http://blog.csdn.net/fjssharpsword/article/details/52931373 ht ...

  8. 沃舍尔算法_[数据结构拾遗]图的最短路径算法

    前言 本专题旨在快速了解常见的数据结构和算法. 在需要使用到相应算法时,能够帮助你回忆出常用的实现方案并且知晓其优缺点和适用环境.并不涉及十分具体的实现细节描述. 图的最短路径算法 最短路径问题是图论 ...

  9. 图的最小生成树和最短路径算法思路总结(Prim,Kruskal,Dijkstra,Floyd)

    带权无向图->最小生成树算法->Prim算法: 思路: 首先,我们先设置两个集合,U_{}:一个用来放最小生成树的顶点,T_{}:一个用来放最小生成树的边.选取最开始的点V_0,将V_0放 ...

  10. 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历

    一.图的表示 图G=(V,E).要表示一个图,通常有两种方法:邻接表和邻接矩阵.两种方法都既可以表示有向图,也可以表示无向图. 邻接表表示由一个包含|V|个列表的数组组成,其中每个列表对应V中的一个顶 ...

最新文章

  1. html date 设置时间,JavaScript Date(日期)
  2. yum方式安装android_Android-x86尝鲜续 系统详细安装教程
  3. jquery中的each不能结束外层的function
  4. python数据容器专题
  5. CentreonMonitoringEvent Logs没有结果的解决方法
  6. C#中使用MongoDb
  7. 用c语言写图书管理系统设计,C语言图书管理系统设计及实现.doc
  8. android c callstack,[MTK] 如何在android native code 打callstack
  9. ISO 9001质量管理体系标准概述
  10. Pygame小游戏之俄罗斯方块凭什么火了30年?(史上最畅销单机游戏)
  11. 使用js制作完整轮播图 (解决最后一张切换到前面一张的动画问题)
  12. swift/dart代码规范检查工具介绍
  13. Pod 污点和容忍度
  14. excel如何选中从当前单元格第一行跳到内容最后一行或者从选的最后一行跳到第一行
  15. laragon mysql版本_Laragon下载-Laragon最新免费版-最火软件站
  16. The Things Network LoRaWAN Stack V3 学习笔记 2.5 LoRa节点配置接入
  17. 利用vs将cs文件编译成dll文件
  18. 指针难点——数组指针、指针数组、函数指针、指针函数详解
  19. 怎么用HTML5制作万花筒,简易万花筒制作详细步骤 手工万花筒的做法图解
  20. 2012年3月30日

热门文章

  1. Asterconference Asia 2012 中国大会
  2. C++新标准——C++1x
  3. 别再用 Visio 了!试试这个比它快 10 倍的画图工具不香吗?
  4. 数据架构总体设计方案
  5. 一次线上商城系统高并发优化,涨姿势了~
  6. 别人工作2年半跳槽面试阿里,成功拿到offer,为什么你不可以?
  7. 【机房运维】网格机房机柜、机架内的空间规划及理线方法
  8. 30岁前,一定要完成哪些人生规划?
  9. 想赚钱,你对钱敏感么?
  10. linux服务之NTP及chrony时间同步