数据结构之最短路径

本文介绍了数据结构中的两种最短路径算法——Dijkstra算法和Floyd算法。Dijkstra算法通过逐步扩展已找到最短路径的顶点集来寻找所有顶点的最短路径,而Floyd算法则通过迭代检查是否存在更短路径来更新所有顶点对的最短路径。
摘要由CSDN通过智能技术生成

1.Dijkstra算法

1.1 Dijkstra算法思想

  • 设置两个顶点集S和T,集合S中存放已经找到最短路径的顶点,集合T中存放着当前还未找到最短路径的顶点;
  • 初始状态下,集合S中只包含源点V1,T中为除了源点之外的其余顶点,此时源点到各顶点的最短路径为两个顶点所连的边上的权值,如果源点V1到该顶点没有边,则最小路径为无穷大;
  • 从集合T中选取到源点V1的路径长度最短的顶点Vi加入到集合S中;
  • 修改源点V1到集合T中剩余顶点Vj的最短路径长度。新的最短路径长度值为Vj原来的最短路径长度值顶点Vi的最短路径长度加上Vi到Vj的路径长度值中的较小者;
  • 不断重复步骤3、4,直至集合T的顶点全部加入到集合S中。

1.2 Dijkstra参考代码

#include<bits/stdc++.h>
const int MAX=1000000;
using namespace std;
int main()
{
   
	int n,m;
	int x,y,w;
	int u=1; //表示该店是题目所要求的的单源点
	cin>>n>>m;
	vector<int> dis(n+1,MAX);
	vector<int> vis(n+1,0);
	vector<vector<pair<int,int>>> vec(n+1);
	//采用邻接矩阵的方式存储图的边
	for(int i=0;i<m;i++<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值