数据结构笔记——最短路径BFS算法
写在前面:科班出身,应届考研党,愿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算法相关推荐
- 数据结构——图——最短路径DF算法
一.Dijkstra算法(贪心地求最短距离的算法) 在此算法中,我按照自己的理解去命名,理解起来会轻松一些. #define MAXSIZE 100 #define UNVISITED 0 #defi ...
- 漫画:数据结构之最短路径 Dijkstra 算法的优化 | 技术头条
作者小灰,本文经授权转载自程序员小灰(ID:chengxuyuanxiaohui). 在<漫画:图的 "最短路径" 问题>一文中小灰介绍了单源最短路径算法 Dijkst ...
- 最短路径BFS算法matlab,迷宫的最短路径 bfs算法
题目描述: 给定一个大小为N*M的迷宫,由通道(.)和墙壁(#)组成,其中通道S表示起点,通道G表示终点,每一次移动可以到达上下左右中不是墙壁的位置.试求出起点到终点的最小步数. 样例输入输出: 思路 ...
- 【数据结构笔记03】算法实例:最大子列和
本次笔记内容: 1.3.1 应用实例_算法1&2 1.3.2 应用实例_算法3 1.3.3 应用实例_算法4 文章目录 最大子列和问题 算法1:把所有子列拿出来比较(暴力法) 算法2:不做重复 ...
- (王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想、代码、演示、答题规范)
文章目录 一:BFS算法基本思想 二:BFS算法代码 三:反思 最短路径shortestpath):主要有以下两类最短路径问题 单源最短路径问题:一个顶点到其他顶点最短路径 迪杰斯特拉算法(dijks ...
- 【考研408】算法与数据结构笔记
文章目录 绪论 数据结构的基本概念 算法和算法评价 线性表 线性表的定义和基本操作 线性表的顺序表示 线性表的链式表示 栈和队列 栈 基本操作 栈的顺序存储结构 栈的链式存储 队列 队列常见的基本操作 ...
- 简单成都地铁信息查询系统,BFS算法实现最短路径查找
前言 最近数据结构期末作业要求做一个成都地铁信息系统,在网上查阅了相关资料之后,做了出来,因为复用性极强,且代码注释都比较详细,于是决定分享出来 思路 总的来说就是从两个文本文件中读入站点和站点信息, ...
- 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记
复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...
- python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
最新文章
- Spring MVC POST中文乱码解决方案
- leetcode算法题--Can I Win
- duck typing java_编程语言中的鸭子类型 Duck Typing
- zabbix代理服务器搭建
- 神策数据荣登 2020 IDC 中国 Fintech 50 强榜单
- 解决VS2013无法安装ArcObjects10.2的问题
- ITK:提取网格边界上的顶点
- 在《糖豆人》身上,我们看到了竞技游戏火爆的六大因素
- 拥抱开源,好莱坞有了自己的开源基金会:学院软件基金会
- 光纤模块与光纤收发器的区别
- python函数 global_Python global全局变量函数详解
- Docker 入门(2)技术实现和核心组成
- python苦逼_自学Python编程的第六天(最后代码有更好的请告诉我)----------来自苦逼的转行人...
- 深入探讨MFC消息循环和消息泵(一)
- centos树莓派安装mysql_树莓派3B+安装CentOS7
- Java排序之Comparable与Comparator详解
- HTML5期末大作业:我的家乡网站设计——我的家乡-绿城之都-南宁(9页) HTML+CSS+JavaScript 大学生简单个人静态HTML网页设计作品
- VMware虚拟机安装ubuntu后无法复制文件的解决办法
- 收集一些电子书下载的网站
- C# 判断是否是节假日