【数据结构】最短路径(Dijsktra算法)

在这里插入图片描述

最小生成树与最短路径的区别

最短路径问题

最短路径是求两点之间路径最短的问题,应用如导航,两个地方怎么走距离最短。可以存在到不了的情况。

这个问题是说,如何找到从某个特定的节点出发,通向其他节点的最短路径。它只着眼于点与点之间的路径问题,并不关注整个图,也就意味着对一个节点运行算法的结果与另一个节点的结果之间没有多少关系。

比如说,可以把城市的路口看作图的节点,把公路看做边,综合长度、拥堵程度等指标作为边的权重,就可以通过Dijkstra算法计算出从城市一点到另一点的最短路线。

最小生成树问题

最小生成树是把连通的图的所有顶点连起来路径之和最小的问题,即生成树总权值之和最小。

即在一个连通的图里,如何去除图里的边,使得剩余的边仍能连接所有的节点,且这些边的权重之和最小。显然,满足这个要求的图不可能存在环,也就是一棵树,因此叫做生成树。这种算法与上面的相反,着眼于整个图的结构,并不关心某两个节点之间的路径是不是最短的。

这种算法的应用也很广泛,比如说有一个快递公司,每天都要开车把快递送到城市里的不同地点,怎样走才能不重复地经过每个节点,还能让总时间最短呢?我们就可以用Kruskal这样的最小生成树算法,找到一个最小生成树,只需要按这个路线走就行了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<stack>
#define MAX 50
#define INFINIT 65535

using namespace std;

class MGraph {
   
	private:
		int vertexNum, arcNum;
		int arc[MAX][MAX];
		int vertex[MAX];
		int dist[MAX];
		int path[MAX];
		int s[MAX];
		int startV;
	public:
		MGraph(int v[], int n, int e);
		void display();
		void Dijkstra(int startV);
		int findMinDist();
		void displayPath();
		void displayDistPathS();
};

MGraph::MGraph(int v[], int n, int e) {
   
	vertexNum = n;
	arcNum = e;
	for (int i = 0; i < vertexNum; i++) {
   
		vertex[i] =
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值