贪心算法之单源最短路径

迪杰斯特拉算法是一种贪心策略,用于求解有向网络中的单源最短路径问题。从指定顶点开始,逐步将最接近的未标记顶点加入集合,直到覆盖所有顶点。算法时间复杂度为O(n^2),通过不断更新最短路径确保找到最优解。
摘要由CSDN通过智能技术生成

问题:在一个有向网络中,从某点出发得到所有到该顶点的最短距离。

迪杰斯特拉算法是解单源最短路径问题的一个贪心算法,其基本思想是,设置顶点集合S不断的贪心选择来扩充这个集合。当源点到该顶点的最短距离已知,则添加到集合来,最终包括网络中的所有顶点。

贪心选择:

step1:首先选择网络中的某一顶点V出发,那么该顶点肯定可以添加到S中,然后以V为源点,得到它到其他顶点的距离(初始化d[],表示V到其他顶点的距离)

step2:在这些顶点中选择没有标记过的(即未添加到S集合中的点)  并且到V的距离最小的顶点V’,然后将其标记

step3:更新d[],从V'出发遍历网络没有标记的顶点,如果找到一个点d[u]+edge[u][j]<d[j]的情况,则更新d[j]=d[u]+edge[u][j]

step4:重复step2

性能分析:

      算法时间主要花在两个for循环中,时间复杂度为O(n2)

代码实现:

#include<stdio.h>

typedef char VertexType;
typedef int EdgeType;
#define MAX 20//定义数组大小
#define INFINITY 500

typedef struct 
{
VertexType vexs[MAX];
EdgeType edges[MAX][MAX];
int vexnum;//记录图的顶点数
int arcnum;//记录图的边或弧的条数
}AdjMatrix;
//创建图的邻接矩阵
AdjMatrix CreatGraph_Matrix(int graphtype)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G11176593

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值