`
u010815305
  • 浏览: 30180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

单源点最短路径

 
阅读更多
1.基本思想
从图的给定源点到其他各个顶点之间客观上应存在一条最短路径
,在这组最短路径中,按其长度的递增次序,依次求出到不同顶点的最短路径
和路径长度
即按长度递增的次序生成各顶点的最短路径,即先
求出长度最小的一条最短路径,然后求出长度第二小的
最短路径,依此类推,直到求出长度最长的最短路径.
2 算法思想说明
设给定 源点为 Vs,S为已求得最短路径的终点集,开始时令S={Vs} 。
当求得第一条最短路径(Vs ,Vi)后,S为{Vs,Vi} 。根据以下结论可求下一条最短路径。
设下一条最短路径终点为 Vj,则,Vj只有:
◆ 源点到终点有直接的弧 <Vs,Vj>;
◆ 从Vs 出发到Vj的这条最短路径所经过的所有中间顶点必定在S中。
即只有这条最短路径的最后一条弧才是从S内某个顶点连接到S外的顶点Vj。

若定义一个数组 dist[n],其每个dist[i]分量保存从 Vs 出发中间只经过集合S中的顶点而到达Vi的所有路径中长度最小的路径长度值,
则下一条最短路径的终点Vj必定是不在S中且值最小的顶点,即:
dist[i]=Min{ dist[k]| Vk∈V-S }
利用上述公式就可以依次找出下一条 最短路径
3.算法实现
设数组pre[n]保存从Vs到其他顶点的最短路径.若pre[i]=k,表示
从Vs到Vi的最短路径中,Vi的前一个顶点式Vk,

数组final[n],标示一个顶点是否加入 SAX2DTM

bool final[MAX_VEX];
int pre[MAX_VEX],dis[MAX_VEX];
void Dijkstra_path(AdjGraph *G,int v)
{
	int j,k,m,min;
	for(j=0;j<G->vexnum;j++)
	{
		pre[j]=v;final[j]=FALSE;
		dist[j]=G->adj[v][j];
	}/*各数组的初始化*/
	dist[v]=0;final[v]=TRUE;/*设置S={v}*/
	for(j=0;j<G->vexnum-1;j++)/*其余n-1个顶点*/
	{
		m=0;
		while(final[m])m++;/*找不在S 中的顶点Vk*/
		min=INFINITY;
		for(k=0;k<G->vexnum;k++)
		{
			if(!final[k]&&dist[m]<min)
			{min=dist[k];m=k;}
		}/*求出当前最小的dist[k]值*/
		final[m]=TRUE;/*将第k 个顶点并入S 中*/
		for(j=0;j<G->vexnum;j++)
		{if(!final[j]&&(dist[m]+G->adj[m][j]<distj]))
			{
				dist[j]=dist[m]+G->adj[m][j];
				pre[j]=m;
			}
		}/*修改dist 和pre 数组的值*/
		
		
	}/*找到最短路径*/
	
	
}



分享到:
评论

相关推荐

    单源点最短路径的贪心算法

    "单源点最短路径的贪心算法" 单源点最短路径问题是图论中的一个基本问题,它是指从图中的一个源点到所有其他点的最短路径。贪心算法是一种常用的解决此类问题的方法。本文将介绍使用贪心算法实现单源点最短路径问题...

    三种算法(Floyd、Dijkstra、SPFA)求单源点最短路径。

    其次,Dijkstra算法由荷兰计算机科学家艾兹格·迪科斯彻提出,主要用于寻找单源最短路径。Dijkstra算法采用贪心策略,每次选择当前未访问节点中距离源点最近的一个加入到最短路径集合中。它保证了路径的正确性,但不...

    实现求解单源点最短路径问题

    【单源点最短路径问题】是指在图论中,给定一个有向图G=(V,E),其中V是顶点集合,E是边集合,每个边e上有权重c(e),我们想要找到从一个特定顶点V0出发到图中其他所有顶点的最短路径。这个问题通常出现在网络优化、...

    单源点最短路径程序

    单源点最短路径是图论中的一个经典问题,在计算机科学和网络分析中有着广泛的应用。这个算法的主要目的是从图中的一个特定顶点(源点)出发,找到到达其他所有顶点的最短路径。这样的算法可以用于解决各种实际问题,...

    单源点最短路径的实现

    在计算机科学与图论领域,单源最短路径问题是指在一个加权图中找到从一个特定顶点(源点)到图中所有其他顶点的最短路径。这个问题的一个经典解决方法是**Dijkstra算法**。该算法由荷兰计算机科学家Edsger W. ...

    单源点最短路径 最优二分检索树 程序实现

    在计算机科学领域,单源点最短路径问题和最优二分检索树是两个重要的算法概念,它们在数据结构和图论中占据着核心地位。本文将深入探讨这两个算法的原理、实现及其应用。 首先,我们来看单源点最短路径(Single ...

    (有向)带权图的单源点最短路径算法(java源码)

    * (有向)带权图的单源点最短路径算法 */ package dsa; public class BestFSDijkstra extends BestFS { //构造方法 public BestFSDijkstra(Graph g) { super(g); } //更新尚未访问的顶点到源点的最短距离 ...

    用贪心算法解单源最短路径问题

    用贪心算法解单源最短路径问题 在计算机科学和信息技术领域中,单源最短路径问题是指从一个源点到其他顶点的最短路径问题。它是一种典型的图论问题,广泛应用于交通网络、通信网络、计算机网络等领域。贪心算法是...

    单源点最短路径算法的实现 数据结构 课程设计.pdf

    这涉及到对数据结构和算法的深入理解和应用,特别是迪杰斯特拉算法(Dijkstra's Algorithm),这是一种常用的求解单源最短路径问题的算法。 迪杰斯特拉算法的基本思想是从源点开始,逐步扩展最短路径,每次选取当前...

    Dijstra 单源点最短路径

    **单源点最短路径问题**是图论中一个经典的算法问题,主要寻找从单一顶点到图中所有其他顶点的最短路径。在计算机科学中,这在路由、网络流量优化、游戏编程等领域有广泛应用。Dijkstra算法是由荷兰计算机科学家艾兹...

    单源最短路径实验报告

    【单源最短路径】是图论中的一个重要概念,它是指在给定的带权有向图中,从一个特定的源节点出发,找到到达所有其他节点的最短路径。这个概念广泛应用于计算机科学和算法设计,特别是在网络路由、物流规划、社交网络...

    单源点最短路径算法

    struct Node { int distance; int prev; }; void PrintPath(Node* node, int source, int index) ... if (node[index].index == source) ...int BellmanFord(int** matrix, int node_num, int source, int dest) ...

    分支限界法求解单源最短路径.zip

    在本案例中,我们关注的是如何利用分支限界法求解单源最短路径问题。单源最短路径问题是从一个指定的起点到图中所有其他顶点的最短路径问题,这个问题在图论和计算机科学中有广泛的应用,例如网络路由优化、物流配送...

    单源最短路径--分支限界法

    "单源最短路径--分支限界法" 单源最短路径是图论中的一种常见问题,它是指从一个源顶点到所有其他顶点的最短路径长度。这里的长度是指路上各边权之和。本文将介绍一种解决单源最短路径问题的方法,即分支限界法。 ...

    最短路径 Dijkstra算法C语言实现

    系统主要实现了图的创建、单源点最短路径的计算功能。依照本系统可以解决实际生活中许多路径选择问题,比如交通旅游、城市规划以及电网架设等等。系统性能稳定,适应性强,界面清晰,操作简单,适合用户使用。 课程...

    单源最短路径分支界限法

    单源最短路径分支界限法 单源最短路径分支界限法是指在图论中,使用分支限界法来解决单源最短路径问题的算法。该算法采用java语言实现,参考了算法设计与分析的方法。 单源最短路径问题是指在一个有权重的图中,找...

    分支限界法求解单源最短路径

    单源最短路径问题在图论中是一个经典问题,它要求找出从图中一个特定顶点(源点)到其他所有顶点的最短路径。在这个场景中,我们使用了分支限界法来解决这个问题。分支限界法是一种搜索算法,通常用于优化问题,它...

    求单源点最短路径效率很高的spfa算法

    SPFA(Shortest Path Faster Algorithm)是一种用于解决图论中的单源最短路径问题的算法,由姚一兆提出。相比于Dijkstra算法,SPFA在处理某些稠密图时表现出更高的效率,尽管它不是一种确定性的算法,但在实际应用中...

Global site tag (gtag.js) - Google Analytics