上次写了关于数据结构的图。图的算法只有一个考点:最短路径问题。最短路径问题(ShortestPathProblems):给定一个网络,在网络的边上有权重,找到一条从给定起点到给定终点的路径,使路径上的边权重之和最小。比如上图中:图中1点到4点的最短路径长度应该是3(从1到2再到4)。Dijkstra算法常用来解决最短路径问题Dijkstra算法Dijkstra算法是一种典型的单源最短路径算法,用于计算从一个节点到所有其他节点的最短路径。主要特点是起点为中心,逐层向外扩展,直至到达终点。比如上图中的Dijkstra算法就是不断的寻找起始节点到邻居节点的所有路径,设置初始距离为最短距离,然后不断更新邻居节点的最短距离,直到最短距离最远节点的解决。的过程。文字描述不清楚,看下面动图。图上的顶点分为两组已访问节点和未访问节点。每次从visited扩展一个点,扩展规则是可更新点之间的最小距离。我们以上图为例,先用邻接矩阵表示无向图:MAX=9999g=[[0,1,4,6],[MAX,0,MAX,2],[MAX,MAX,0,1],[MAX,MAX,MAX,0]]邻接矩阵g[0][1]=1表示第一个节点到第二个节点的距离为1。目的是求起点1到其他点的最小路径距离n=4#4个点#初始化visitedvisitd=[0]*(n)#记录该点是否被访问过#第一个点访问过visitd[0]=1#初始化源点到每个点节点的距离集合d=g[0]foriinrange(2,n):#遍历d取出权重最小的节点位置minWeigth=MAXforjinrange(2,n):ifd[j]
