数据结构--6.0最短路径

目录

一、迪杰斯特拉算法(Dijkstra)

二、弗洛伊德算法(Floyd)


在网图和非网图中,最短路径的含义是不同的。

------网图是两顶点经过的边上的权值之和最少的路径。

------非网图是两顶点之间经过的边数最少的路径。

我们把路径起始的第一个顶点称为源头,最后一个顶点称为终点。

关于最短路径的算法:

1、迪杰斯特拉算法(Dijkstra)

2、弗洛伊德算法(Floyd)

一、迪杰斯特拉算法(Dijkstra)

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

#define MAXVEX 9
#define INFINITY 65536

typedef int Patharc[MAXVEX];				//用于存储最短路径下标的数组 
typedef int ShortPathTable[MAXVEX];			//用于存储到各点最短路径的权值 

void ShortestPath_Dijkstra(MGraph G , int V0,Patharc *p,ShortPathTable *D)
{
	int v,w,k,min;
	int final[MAXVEX];						//final[w]=1 表示已经求得顶点v0到vw的最短路径 
	
	//初始化数据 
	for(v=0;v<G.numVertexes; v++)
	{
		final[v] = 0;						//全部顶点初始化为未找到最短路径 
		(*D)[v] = G.arc{V0}[v];				//将与v0点有连接线的顶点加上权值 
		(*p)[v] = 0;						//初始化路径数组p为0 
	}
	(*D)[V0] = 0;					//v0至v0的路径为0 
	final[v0] = 1;					//v0至v0不需要求路径 
	
	//开始主循环,每次求得v0到某个v顶点的最短路径 
	for(v=1;v<G.numVertexes;v++)
	{
		min = INFINITY;
		for(w =0; w<G.numVertexes; v++)
		{
			if(!final[w]&&(*D)[w]<min)
			{
				k = w;
				min = (*D)[w];	
			}	
		} 
		final[k] = 1;//将目前找到的最短路径置1 
		
		//修正当前最短路径及距离 
		for(w=0; w<G.numVextexes;w++)
		{
			//如果经过v顶点的路径比现在这条路径的长度短的话,更新! 
			if( !final[w]&&(min+G.arc[k][w] < (*D)[w]))
			{
				(*D)[w] = min + G.arc[k][w];		//修改当前路径长度 
				(*p)[w] = k;						//存放前驱顶点 
			}
		} 
	}
}
 

二、弗洛伊德算法(Floyd)

弗洛伊德算法非常简洁优雅。

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

#define MAXVEX 9
#define INFINITY 65536

typedef int Pathmatirx[MAXVEX][MAXVEX];
typedef int ShortPathTable[MAXVEX][MAXVEX];

void ShortestPath_Floyd(MGraph.G,Pathmatirx *p,ShortPathTable *D)
{
	int v,w,k;
	//初始化  D  和   p 
	for(v=0;v<G.numVertexes;w++)
	{
		for(w=0;w<G.numVertexes;w++)
		{
			(*D)[v][w] = G.matirx[v][m];
			(*p)[v][w] = w;
		}
	}
	//弗洛伊德算法 
	for(k=0;k<G.numVertexes;k++)
	{
		for(v=0;v<G.numVertexes;v++)
		{
			for(w=0;w<G.numVertexes;w++)
			{
				if((*D)[v][w] > ((*D)[v][k] + (*D)[k][w]))
				{
					(*D)[v][w] = (*D)[v][k] + (*D)[k][w];
					(*p)[v][w] = (*p)[v][k];
				}
			}
		}
	}
} 
相关推荐
qq7422349843 分钟前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程
数智工坊9 分钟前
【数据结构-树与二叉树】4.5 线索二叉树
数据结构
A尘埃29 分钟前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹36 分钟前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
数智工坊38 分钟前
【数据结构-树与二叉树】4.3 二叉树的存储结构
数据结构
独好紫罗兰44 分钟前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python
不穿格子的程序员1 小时前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物1 小时前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士1 小时前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法