写在前面:科班出身,应届考研党,愿21考研成功上岸,冲冲冲!

目录

一、最短路径问题

二、BFS求无权图的单源最短路径

三、代码实现

四、总结

一、最短路径问题

单源最短路径——BFS算法、Dijkstra算法

其中BFS算法(无权图)、Dijkstra算法(带权图,无权图)

各顶点间的最短路径——Floyd算法(带权图、无权图)

二、BFS求无权图的单源最短路径

注:无权图可以视为一种特殊的带权图,只是每条边的权值都为1

三、代码实现

bool visited[MAX_VERTEX_NUM];//访问标记数组//广度优先遍历
void BFS(Graph G,int v){        //从顶点v出发,广度优先遍历图Gvisit(v);            //访问初始顶点vvisited[v] = TRUE;        //对v做已访问标记Enqueue(Q,v);        //顶点v入队列Qwhile(!isEmpty(Q)){DeQueue(Q,v);        //顶点v出队列for( w = FirstNeighbor(G,v); w >= 0; w = NextNeighbor(G,v,w))//检测v所有邻接点if(!visited[w]){        //w为v的尚未访问的邻接顶点visit(w);            //访问顶点wvisited[w] = TRUE;        //对w做已访问标记EnQueue(Q,w);        //顶点w入队列}//if}//while
}
//求顶点u到其他顶点的最短路径
void BFS_Distance(Graph G,int u){for(i = 0;i < G.vexnum;++i){d[i] = w;path[i] = -1;}d[u] = 0;visited[u] = TRUE;EnQueue(Q,u);while(!isEmpty(Q)){DeQueue(Q,u);for(w = FirstNeighbor(G,u);w >= 0;w = NextNeighbor(G,u,w))if(!visited[w]){d[w] = d[u] + 1;path[w] = u;visited[w] = TRUE;EnQueue(Q,w);}//if}//while
}

四、总结

对应的广度优先生成树为

思路就是对BFS的小修改,在visit一个顶点时,修改其最短路径长度d[]并在path[]记录前驱结点

2到8的最短路径长度=d[8]=3

通过path数组可知,2到8的最短路径为:8<- 7 <- 6 <- 2

数据结构笔记——最短路径BFS算法相关推荐

  1. 数据结构——图——最短路径DF算法

    一.Dijkstra算法(贪心地求最短距离的算法) 在此算法中,我按照自己的理解去命名,理解起来会轻松一些. #define MAXSIZE 100 #define UNVISITED 0 #defi ...

  2. 漫画:数据结构之最短路径 Dijkstra 算法的优化 | 技术头条

    作者小灰,本文经授权转载自程序员小灰(ID:chengxuyuanxiaohui). 在<漫画:图的 "最短路径" 问题>一文中小灰介绍了单源最短路径算法 Dijkst ...

  3. 最短路径BFS算法matlab,迷宫的最短路径 bfs算法

    题目描述: 给定一个大小为N*M的迷宫,由通道(.)和墙壁(#)组成,其中通道S表示起点,通道G表示终点,每一次移动可以到达上下左右中不是墙壁的位置.试求出起点到终点的最小步数. 样例输入输出: 思路 ...

  4. 【数据结构笔记03】算法实例:最大子列和

    本次笔记内容: 1.3.1 应用实例_算法1&2 1.3.2 应用实例_算法3 1.3.3 应用实例_算法4 文章目录 最大子列和问题 算法1:把所有子列拿出来比较(暴力法) 算法2:不做重复 ...

  5. (王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法基本思想 二:BFS算法代码 三:反思 最短路径shortestpath):主要有以下两类最短路径问题 单源最短路径问题:一个顶点到其他顶点最短路径 迪杰斯特拉算法(dijks ...

  6. 【考研408】算法与数据结构笔记

    文章目录 绪论 数据结构的基本概念 算法和算法评价 线性表 线性表的定义和基本操作 线性表的顺序表示 线性表的链式表示 栈和队列 栈 基本操作 栈的顺序存储结构 栈的链式存储 队列 队列常见的基本操作 ...

  7. 简单成都地铁信息查询系统,BFS算法实现最短路径查找

    前言 最近数据结构期末作业要求做一个成都地铁信息系统,在网上查阅了相关资料之后,做了出来,因为复用性极强,且代码注释都比较详细,于是决定分享出来 思路 总的来说就是从两个文本文件中读入站点和站点信息, ...

  8. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

    复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...

  9. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

最新文章

  1. Spring MVC POST中文乱码解决方案
  2. leetcode算法题--Can I Win
  3. duck typing java_编程语言中的鸭子类型 Duck Typing
  4. zabbix代理服务器搭建
  5. 神策数据荣登 2020 IDC 中国 Fintech 50 强榜单
  6. 解决VS2013无法安装ArcObjects10.2的问题
  7. ITK:提取网格边界上的顶点
  8. 在《糖豆人》身上,我们看到了竞技游戏火爆的六大因素
  9. 拥抱开源,好莱坞有了自己的开源基金会:学院软件基金会
  10. 光纤模块与光纤收发器的区别
  11. python函数 global_Python global全局变量函数详解
  12. Docker 入门(2)技术实现和核心组成
  13. python苦逼_自学Python编程的第六天(最后代码有更好的请告诉我)----------来自苦逼的转行人...
  14. 深入探讨MFC消息循环和消息泵(一)
  15. centos树莓派安装mysql_树莓派3B+安装CentOS7
  16. Java排序之Comparable与Comparator详解
  17. HTML5期末大作业:我的家乡网站设计——我的家乡-绿城之都-南宁(9页) HTML+CSS+JavaScript 大学生简单个人静态HTML网页设计作品
  18. VMware虚拟机安装ubuntu后无法复制文件的解决办法
  19. 收集一些电子书下载的网站
  20. C# 判断是否是节假日

热门文章

  1. 模块学习(二)——MPU6050
  2. Ubuntu下域名服务器bind9 安装与配置
  3. QPushButton的简单使用
  4. Xsens MTi传感器 ROS下配置
  5. 爬虫之Scrapy框架
  6. NS版暗黑破坏神3金手指开发教程(7)
  7. MTU与TCP-MSS
  8. Flutter组件ListView
  9. PostgreSQL简单上手
  10. strokeRect函数使用