6.9.单源最短路径问题-BFS算法

【算法】单源最短路径算法——Dijkstra算法 Dijkstra算法 阅读详情

一.前言:

问题1:

以上述图片为例,比如从G港到Y城,可以是G港->R城->Y城,也可以是G港->P城->Y城等,有很多条路径都可以实现从G港到Y城,但要从中找出G港到Y城距离最短的那一条路径,这就是单源最短路径问题。

单源最短路径问题就是只有一个源头,从该源头出发,到达其他任意一个顶点可以走的最短路径。

对于单源最短路径的题型,需要掌握BFS算法(可以求无权图的单源最短路径)和Dijkstra算法(可以求带权图和无权图的单源最短路径)。

问题2:

上述图片的各个城市需要往来,相互之间怎么走距离最近呢?比如R城和M城之间要走哪条路比较划算即距离最近,Y城和P城之间要走哪条路比较划算即距离最近,所以在这样的应用场景之下,我们就要确定每对顶点间的最短路径。

对于各顶点间的最短路径的题型,需要掌握Floyd算法(可以求带权图和无权图的各顶点间的最短路径)。


二.BFS算法求无权图的单源最短路径的准备工作:

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

2.实例:

以上述图片为例,从2号顶点出发,求出到达各个顶点的最短路径,如下图:

如上图,通过BFS算法,从2号顶点出发,可以找到与2号顶点相邻的的顶点即1、6号顶点,2号顶点与1、6号顶点之间的距离都是1(无向图的边的权值可以视为1),如下图:

如上图,通过1、6号顶点可以找到5、3、7号顶点,2号顶点到达5、3、7号顶点的最短路径都是2,如下图:

如上图,继续往下找可以找到4、8号顶点,2号顶点到达4、8号顶点的最短路径都是3,如下图:

所以对上述图片里的图执行一次BFS算法即广度优先遍历,就可以得到2号顶点到达其他所有顶点的最短路径。


三.BFS算法求无权图的单源最短路径的代码实现:

1.代码:

如上图,需要在原有的BFS算法的代码上进行改造->在BFS函数中用visit函数来抽象地表示出对某一个顶点的访问,改造成求最短路径,只需要把visit函数的作用进行改造即可,如下图:

上述图片的代码解读:

  • BFS_MIN_Distance函数的第一个形参Graph G表示图,第二个形参int u表示当前顶点的编号,G.vexnum表示图的顶点个数;

  • d[]数组用来记录起始顶点到各个顶点的最短路径的长度;path[]数组用来记录每一个顶点在这个最短路径上的直接前驱,path数组就是记录这条最短路径是从哪个顶点过来的;

2.举例:

如上图,以2号顶点为例,求2号顶点到达其他顶点的最短路径->

BFS_MIN_Distance函数的第一个形参Graph G表示图,第二个形参int u表示当前顶点的编号,

由于此时操作的是2号顶点,因此BFS_MIN_Distance函数的第二个形参u等于2;

d[]数组用来记录起始顶点到各个顶点的最短路径的长度;path[]数组用来记录每一个顶点在这个最短路径上的直接前驱,path数组就是记录这条最短路径是从哪个顶点过来的,

由于一开始并不知道顶点间的距离和顶点前驱,因此第一个for循环把d数组的值都初始化为无穷,path数组的值都初始化为-1,

d[u]就是起始顶点到第u号顶点的最短路径,由于2号顶点是起始顶点,第u号顶点也是2号顶点,2号顶点到2号顶点的最短路径为0,因此d[2]=0;

visited[u]=true表示第u号顶点已经被访问过,EnQueue(Q,u)函数代表第u号顶点进入队列Q,

此时就是visited[2]=true即2号顶点被访问过,并把第2号顶点放入队列Q中,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有2号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第2号顶点,如下图:

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与2号顶点相邻的所有顶点,现在可以找到1、6号顶点,以1号顶点为例,此时w为1,

如果其中的某个顶点即w号顶点没有被访问过即对应的visited值为false,!visited[w]为true,那么就会执行if语句,由于此时w为1,1号顶点没有被访问过,因此执行if语句,

d[w]=d[u]+1意味着当前顶点即第u号顶点到达相邻顶点即第w号顶点的最短路径加1,此时就是d[1]=d[2]+1,由于d[2]为0,那么d[1]为1,意味着从2号顶点到1号顶点的最短路径为1,

还需要修改path数组的值,path数组就是记录这条最短路径是从哪个顶点过来的,1号顶点是从2号顶点过来的,所以1号顶点的直接前驱是2号顶点即path[1]=2,

访问过的顶点visited的值修改为true,即visited[1]=true,

执行EnQueue(Q,w)让第w号顶点入Q队列,此时让1号顶点入Q队列,

同理,d[6]为1,path[6]=2,visited[6]=true,6号顶点入Q队列,

至此2号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有1、6号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第1号顶点(注:虽然一开始u是第2号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把2改为1,就是把队头元素即第1号顶点弹出队列,之后的u就代表当前顶点即1号顶点),

开始操作第1号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与1号顶点相邻的所有顶点,现在可以找到2、5号顶点,第一个找到的是2号顶点,由于2号顶点已经被访问过,因此不会执行if语句,会跳过2号顶点,

第二个找到的是5号顶点,此时w为5,

如果其中的某个顶点即w号顶点没有被访问过即对应的visited值为false,!visited[w]为true,那么就会执行if语句,由于此时w为5,5号顶点没有被访问过,因此执行if语句,

d[w]=d[u]+1意味着当前顶点即第u号顶点到达相邻顶点即第w号顶点的最短路径加1,此时就是d[5]=d[1]+1,由于d[1]为1,那么d[5]为2,意味着从2号顶点到5号顶点的最短路径为2,

还需要修改path数组的值,path数组就是记录这条最短路径是从哪个顶点过来的,5号顶点是从1号顶点过来的,所以5号顶点的直接前驱是1号顶点即path[5]=1,

访问过的顶点visited的值修改为true,即visited[5]=true,

执行EnQueue(Q,w)让第w号顶点入Q队列,此时让5号顶点入Q队列,

至此1号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有6、5号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第6号顶点(注:虽然一开始u是第1号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把1改为6,就是把队头元素即第6号顶点弹出队列,之后的u就代表当前顶点即6号顶点),

开始操作第6号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与6号顶点相邻的所有顶点,现在可以找到2、3、7号顶点,第一个找到的是2号顶点,由于2号顶点已经被访问过,因此不会执行if语句,会跳过2号顶点,

第二个找到的是3号顶点,此时w为3,

如果其中的某个顶点即w号顶点没有被访问过即对应的visited值为false,!visited[w]为true,那么就会执行if语句,由于此时w为3,3号顶点没有被访问过,因此执行if语句,

d[w]=d[u]+1意味着当前顶点即第u号顶点到达相邻顶点即第w号顶点的最短路径加1,此时就是d[3]=d[6]+1,由于d[6]为1,那么d[3]为2,意味着从2号顶点到3号顶点的最短路径为2,

还需要修改path数组的值,path数组就是记录这条最短路径是从哪个顶点过来的,3号顶点是从6号顶点过来的,所以3号顶点的直接前驱是6号顶点即path[3]=6,

访问过的顶点visited的值修改为true,即visited[3]=true,

执行EnQueue(Q,w)让第w号顶点入Q队列,此时让3号顶点入Q队列,

同理,d[7]为2,path[7]=6,visited[7]=true,7号顶点入Q队列,

至此6号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有5、3、7号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第5号顶点(注:虽然一开始u是第6号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把6改为5,就是把队头元素即第5号顶点弹出队列,之后的u就代表当前顶点即5号顶点),

开始操作第5号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与5号顶点相邻的所有顶点,现在可以找到1号顶点,由于1号顶点已经被访问过,因此不会执行if语句,会跳过1号顶点,

至此5号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有3、7号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第3号顶点(注:虽然一开始u是第5号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把5改为3,就是把队头元素即第3号顶点弹出队列,之后的u就代表当前顶点即3号顶点),

开始操作第3号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与3号顶点相邻的所有顶点,现在可以找到4、6、7号顶点,

第一个找到的是4号顶点,此时w为4,

如果其中的某个顶点即w号顶点没有被访问过即对应的visited值为false,!visited[w]为true,那么就会执行if语句,由于此时w为4,4号顶点没有被访问过,因此执行if语句,

d[w]=d[u]+1意味着当前顶点即第u号顶点到达相邻顶点即第w号顶点的最短路径加1,此时就是d[4]=d[3]+1,由于d[3]为2,那么d[4]为3,意味着从2号顶点到4号顶点的最短路径为3,

还需要修改path数组的值,path数组就是记录这条最短路径是从哪个顶点过来的,4号顶点是从3号顶点过来的,所以4号顶点的直接前驱是3号顶点即path[4]=3,

访问过的顶点visited的值修改为true,即visited[4]=true,

执行EnQueue(Q,w)让第w号顶点入Q队列,此时让4号顶点入Q队列,

之后依次找到的是6、7号顶点,由于6、7号顶点已经被访问过,因此不会执行if语句,会跳过6、7号顶点,

至此3号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有7、4号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第7号顶点(注:虽然一开始u是第3号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把3改为7,就是把队头元素即第7号顶点弹出队列,之后的u就代表当前顶点即7号顶点),

开始操作第7号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与7号顶点相邻的所有顶点,现在可以找到3、4、6、8号顶点,前三次依次找到的是3、4、6号顶点,由于3、4、6号顶点已经被访问过,因此不会执行if语句,会跳过3、4、6号顶点,

第四个找到的是8号顶点,此时w为8,

如果其中的某个顶点即w号顶点没有被访问过即对应的visited值为false,!visited[w]为true,那么就会执行if语句,由于此时w为8,8号顶点没有被访问过,因此执行if语句,

d[w]=d[u]+1意味着当前顶点即第u号顶点到达相邻顶点即第w号顶点的最短路径加1,此时就是d[8]=d[7]+1,由于d[7]为2,那么d[8]为3,意味着从2号顶点到8号顶点的最短路径为3,

还需要修改path数组的值,path数组就是记录这条最短路径是从哪个顶点过来的,8号顶点是从7号顶点过来的,所以8号顶点的直接前驱是7号顶点即path[8]=7,

访问过的顶点visited的值修改为true,即visited[8]=true,

执行EnQueue(Q,w)让第w号顶点入Q队列,此时让8号顶点入Q队列,

至此7号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有4、8号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第4号顶点(注:虽然一开始u是第7号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把7改为4,就是把队头元素即第4号顶点弹出队列,之后的u就代表当前顶点即4号顶点),

开始操作第4号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与4号顶点相邻的所有顶点,现在可以找到3、7、8号顶点,由于3、7、8号顶点都已经被访问过,因此都不会执行if语句,会跳过3、7、8号顶点,

至此4号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中有8号顶点即Q队列非空,因此isEmpty(Q)的值为false,!isEmpty(Q)的值为true,

此时执行while循环,首先执行DeQueue(Q,u)函数弹出队头元素即弹出第u号顶点,此时是弹出第8号顶点(注:虽然一开始u是第4号顶点,但DeQueue函数中的具体内容已经把u的赋值操作完成了即把4改为8,就是把队头元素即第8号顶点弹出队列,之后的u就代表当前顶点即8号顶点),

开始操作第8号顶点->

如上图,接下来执行while循环里的for循环,for循环可以找到与第u号顶点相邻的所有顶点,此时就是找到与8号顶点相邻的所有顶点,现在可以找到4、7号顶点,由于4、7号顶点都已经被访问过,因此都不会执行if语句,会跳过4、7号顶点,

至此8号顶点处理完毕,如下图:

如上图,继续判断是否执行while循环,

Q队列为空时isEmpty(Q)的值为true,Q队列非空时isEmpty(Q)的值为false,

由于此时队列Q中没有顶点即Q队列为空,因此isEmpty(Q)的值为true,!isEmpty(Q)的值为false,

此时不再执行while循环了,至此BFS_MIN_Distance函数结束,

如下图:

如上图,最终得到了从2号顶点出发,到达其他所有顶点的最短路径长度,还有最短路径中完整的路径信息即path数组。

3.代码核心:该算法的核心就是BFS算法,只不过在BFS算法上增加了d数组和path数组,对于d数组和path数组的使用如下

以刚才的例子为例,如下图:

如上图,比如要想知道2号顶点到8号顶点的最短路径的信息,只需要找到8号顶点对应的d数组和path数组即可,

从d数组可以得知从2号顶点到8号顶点的最短路径长度为3,

通过path数组可以得知8号顶点的前驱是7号顶点,7号顶点的前驱是6号顶点,6号顶点的前驱是2号顶点,最终逆向找到了最原始的起点即找到了2号顶点,因此这条最短路径就是2->6->7->8,如下图:

如上图,上述图片里的图可以得出一个广度优先生成树,如下图,

通过观察可以发现,各个顶点在树的第几层,也直接的反映了从起点2到达其他顶点的最短路径是多少,因为该广度优先生成树是通过BFS算法得出的,那么该生成树的深度(高度)也一定是最小的,

比如8号顶点在树的第四层,那么2号顶点到达8号顶点的最短路径长度为3,最短路径是2->6->7->8:


Dijkstra算法——单源最短路径(指定一个节点(源点)到其余各个顶点的最短路径) Dijkstra算法——单源最短路径。 每次找到距离源点最近的一个节点,然后以该节点为中心进行扩展,最终得到源点到其余所有点的最短路径。 阅读详情

相关推荐

数据结构笔记——最短路径BFS算法

写在前面:科班出身,应届考研党,愿21考研成功上岸,冲冲冲! 目录 一、最短路径问题 二、BFS求无权图的单源最短路径 三、代码实现 四、总结 一、最短路径问题 单源最短路径——BFS算法、Dijkstra算法 其中BFS算法(无权图)、Dijkstra算法(带权图,无权图) 各顶点间的最短路径——Floyd算法(带权图、无权图) 二、BFS求无权图的单源最短路径 注:无权图可以视为一种特殊的带权图,只是每条边的权值都为1 三、代码实现 boo.

晓风岚月 1万+

图详解第四篇:单源最短路径--迪杰斯特拉算法(Dijkstra)算法

单源最短路径--Dijkstra算法

m0_70980326的博客 1万+

详解BFS,Dijkstra算法,Floyd算法是如何解决最短路径问题的

目录1.BFS算法2.Dijkstra算法3.Floyd算法4.总结G纲是个物流离散中心,经常需要往各个城市运东西,怎么运送距离最近——单源最短路径问题各个城市之间也学要来往,相互之间怎么走距离最近?——每对顶点之间的最短路径如下图,BFS算法是如何实现最短路径问题的呢?设从顶点2开始,第一次搜索的结点为1号结点和6号结点,路径为1,从1号结点和6号结点开始找相邻的接地,5号结点和3号7号为相邻的结点,然后5号结点周围都是已经访问过的,3号结点和7号结点分别搜索搭配4号和8号结点,路径为4 代码 B

莫浅子的博客 1万+

单源最短路径分析

单源最短路径问题是指计算从特定的源顶点到每一个顶点的最短路径,或则对称的,从每一个顶点到特定的目的顶点的最短路径。本文从图的基本数据结构入手,讲解有向无环图与一般有向图(带正环或负环)的求解,并从动态规划方面推出经典的Bellman_Ford算法,并对于负圈检测的理论基础也给与分析,而后观察迭代结果,提出算法中存在的两类冗余情况,并对其修改以提高效率;并将去除冗余后的Bellman_Ford推广为Dijkstra算法,并借此讲解如何由动态规划设计贪心算法!

qq_45923860的博客 2696

bfs广度优先搜索

最小生成树算法分层。

2302_80364740的博客 2402

图算法(BFS和DFS)

Prim的最小生成树算法和Dijkstra的单源最短路径算法都使用了类似广度优先搜索的思想。给定图和一个可识别源结点,BFS可以计算从源结点到每个可到达的结点的距离(最少的边数),同时生成一棵广度优先搜索树。在广度优先搜索树里从结点到结点的简单路径所对应的就是图中从结点到结点的最短路径,即包含最少边数的路径。该算法总是在发现所有距离源结点为的所有结点后才会发现距离源结点为的其他结点。在广度优先搜索过程中,在概念上将每个结点涂上白色、灰色或黑色。所有结点一开始均涂上白色。

m0_56945100的博客 509

BFS(广度优先算法)

BFS(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和广度优先搜索类似的思想。属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 简单来说,BFS是一种图搜索的算法,目的是用于搜索检查每一个可以达到的点,直到找到结果为止。他和DFS的区别:DFS是一条路走到黑,如果没用路就返回,而BFS是从上往下层次依序遍历,我

qq_46056407的博客 1万+

图算法之bfs、dfs、prim、Dijkstra

# 概述 在图算法中经常要执行遍历每个顶点和每条边的操作,即图搜索。许多图算法都以图搜索为基础,如2-着色问题、连通性计算基于深度优先搜寻(depth-first search, DFS),而无权最短路径则基于广度优先搜索(breadth-first search, BFS)。基于搜索的算法还包括计算最小生成树的Prim算法以及计算最短路径的Dijkstra算法。图实现算法在现实的算法结构中占据重

xiangzhihong8的专栏 4443

DFS与BFS算法

深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。下面分别介绍两种基本的搜索算法。

qq_41816189的博客 2万+

西门子V90 PN伺服控制核心:FB284功能块详解与实战

在工业自动化中,伺服定位控制是运动控制的基础环节,其本质是PLC通过PROFINET协议与伺服驱动器实现高速、确定性数据交互。FB284作为西门子为V90 PN定制的标准化功能块,封装了GSD映射、状态机管理与周期性PDO同步机制,将底层寄存器操作抽象为高可靠调用接口。相比MOVE指令或MC_MoveAbsolute等通用方案,FB284显著降低时序错乱风险,提升多轴同步精度与故障响应能力。它广泛应用于包装、灌装、装配等中端产线,尤其适配S7-1200/1500平台下的快速部署与现场维护。本文聚焦V90 P

weixin_42696271的博客 299

AP发票批量付款程序(WEB ADI)

CREATE OR REPLACE PACKAGE MEW_AP_BATCH_PAYMENTS_PKG IS   PROCEDURE MAIN(P_BATCH_ID          NUMBER                 ,P_ORG_ID            NUMBER                 ,P_BANK_ACCOUNT_NAME VARCHAR2

储藏室 5051

【算法】BFS—广度优先搜索

【算法】BFS—广度优先搜索     1.BFS介绍     2.连通图     3.BFS算法流程图     4.实例:poj3984迷宫问题     5.核心代码参考:《算法导论》【算法入门】广度/宽度优先搜索(BFS) https://blog.csdn.net/raphealguo/article/details/7523411广度优先搜索算法 https://blog.csdn.net/...

gogo小Sa的专栏 2232

用AI助手Cursor轻松自动生成流程图

通过 Cursor + Mermaid,我们可以快速、准确地自动生成流程图,上面演示的例子部分流程图可能比较丑,我们可以通过流程图软件导入Mermaid代码,然后手动进行微调就可以了,如果你对美观要求不是特别多,可以直接用,这将极大地提升代码可视化和架构设计的效率。

呱牛 Just do IT 1937

BFS-走迷宫问题-java

​ BFS叫做广度优先搜索算法,通过BFS来实现一个走迷宫问题。 ​

m0_63267251的博客 1961

Omnibox 2.11 NAS部署指南:家庭影音中枢的轻量化落地实践

家庭影音平台本质是本地化内容调度中枢,其核心在于聚合NAS媒体库、统一管理直播/IPTV/音频/视频等多源内容,并通过智能元数据匹配与硬解加速实现零门槛播放体验。技术原理上依赖Java轻量Web容器(Jetty)、SQLite嵌入式数据库双缓存架构,以及宿主机FFmpeg动态链接与HTTP/2直播代理治理能力。该方案显著降低4K播放卡顿、EPG加载失败、海报缺失等高频问题,适用于群晖、飞牛、绿联等主流NAS设备,尤其适配ARM64芯片与Realtek网卡等国产硬件生态。本文聚焦Omnibox 2.11在真实

weixin_30846347的博客 471

黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

黑猫带你学eMMC协议第7篇:全网最全emmc写保护详解(write protect) 黑猫带你学eMMC协议第8篇:emmc可靠写详解(Write Reliability) 黑猫带你学eMMC协议第9篇:emmc的分区配置(partitioning) 黑猫带你学eMMC协议第10篇:eMMC命令队列详解(CMDQ) 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim…) 黑猫带你学eMMC协议第12篇:

黑猫奥利奥的博客 2万+

单源最短路径问题

给定一个带权有向图G=(V,E),其中每条边的权是非负数。给定V中的一个顶点a,成为源。现在要计算从源到所有其他个顶点的最短路径长度,这里路径长度指的是各边权之和。这个问题通常被称作单源最短路径问题。如下图所示,每一边都有一非负权值。求图G中从源点a到t的最短路径。 因为是求单源问题,可以使用四种方法进行求解。 算法的基本思路: 分支界限法主要思想在于,将一个问题分成树状,每次选择最优的一个枝叶。比如单源问题便是每次选择最短路径作为基点去不断更新其他路径。 如何书写代码:朴素版的Dijkstra

a18173352623的博客 1356

测试用例设计工具大盘点:总有一款适合你

本文旨在帮助测试工程师、开发人员及团队管理者快速了解主流测试用例设计工具的特点、适用场景和选择逻辑。覆盖工具类型包括传统文档工具、开源管理工具、商业集成平台及新兴AI工具,范围涵盖中小团队到大型企业的不同需求。本文从“测试用例设计的痛点”切入,用生活案例解释核心概念;接着按“工具类型”分类盘点主流工具(附优缺点对比表);再通过“小团队/中大型团队/敏捷团队”等真实场景教你选工具;最后展望AI等未来趋势,帮你“一次学透,终身受用”。

项目管理的博客 1590

算法浅谈bfs

昨天说了dfs,今天当然要聊聊我们的bfs啦,在一定情况下我们的bfs是要比dfs优越点的,特别是在寻找最短路径的时候,我bfs输出的就是最短的。dfs还要比较。。。 当然还是要介绍一下什么是bfs 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能

m0_63623345的博客 573

CONN工具箱分析fmri数据笔记1

前言一、安装二、预处理三、去噪 前言 CONN:functional connectivity toolbox,是基于MATLAB和SPM的一个对功能磁共振数据进行分析的一个工具箱。可以进行以下分析: Seed-based correlations (SBC), ROI-to-ROI correlations, graph analyses, Independent component analyses(group-ICA), Masked (ICA) Amplitude of Low-Frequency.

weixin_52073820的博客 6586

(第78天)DB RU 补丁升级:19C 升级到 19.22

目前 Oracle 19C 是最新的稳定支持的版本,生产环境中使用的越来越多。当然,随着客户使用量的增多,自然无可避免的产生了很多 BUG,Oracle 每季度都会发布一个 RU 补丁来修复当前季度所产生的一些重要 BUG 补丁。作为 DBA,DB 补丁修复必然是需要掌握的一项技能。本文将介绍如何将数据库升级到最新的 RU 版本。

LuciferLiu_DBA 844

双向BFS

百度百科的官方解释:宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 单向bfs 下图为例 A 为 初始出发点遍历整个图 1. A 入队,搜索左右相连的的节点 A

ajl2003的博客 1583

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NC158 有向无环图的单源最短路径问题:Dijkstra算法

描述 在一个有向无环图中,已知每条边长,求出1到n的最短路径,返回1到n的最短路径值。如果1无法到n,输出-1 示例1 输入: 5,5,[[1,2,2],[1,4,5],[2,3,3],[3,5,4],[4,5,5]] 返回值: 9 备注: 两个整数n和m,表示图的顶点数和边数。 一个二维数组,一维3个数据,表示顶点到另外一个顶点的边长度是多少 每条边的长度范围[0,1000]。 注意数据中可能有重边 #include <vector> #include <iostream> #in

柔水终成雕刀 773

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【刷题】BFS题目精选

BFS刷题

qq_53893431的博客 1544

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数据结构与算法之最短路径-Dijkstra算法

接上文的 最短路径-BFS算法 带权路径长度——当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度之和。最短路径问题首先观看如下两副图: 初试: v0v_0v0​到 v2v_2v2​的最短 (带权) 路径长度为: 通过 可知,v_0 到 v_2 的最短 (带权) 路径:v2v_2v2​...

five-five 917

【数据结构与算法-Day 32】掌握广度优先搜索 (BFS),轻松解决无权图最短路径问题

在上一篇文章中,我们深入探讨了图的深度优先搜索(DFS),它像一个执着的探险家,沿着一条路走到黑再回头。今天,我们将学习图的另一种核心遍历策略——广度优先搜索(Breadth-First Search, BFS)。BFS 如同水波扩散,从起点开始,一层一层地向外探索,直到覆盖所有可达的顶点。这种“地毯式”的搜索机制,使其在解决特定问题,尤其是无权图的最短路径问题上,具有无可比拟的优势。本文将通过图解、代码实战和场景分析,带你彻底掌握 BFS 的原理与应用。

吴师兄大模型的博客 1142
上一篇: 3.4.IO流-换行和续写
下一篇: 6.10.单源最短路径问题-Dijkstra算法
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值