【求助】求讲解迪杰斯特拉算法是如何实现的
查看原帖
【求助】求讲解迪杰斯特拉算法是如何实现的
586924
封禁用户楼主2022/6/17 10:24

老师上课带我们讲了迪杰斯特拉算法求图的最短路,但我没理解是怎么实现的。

求洛谷中的大佬指点orz

#include<bits/stdc++.h>
using namespace std;
const int N=2505;
int n,m,s,t;
int dis[N][N],d[N];
bool vis[N];
void Dijkstra(){
	memset(d,0x7f,sizeof(d));
	memset(vis,false,sizeof(vis));
	d[s]=0;
	for(int i=1;i<=n;++i){
		int k=0;
		for(int j=1;j<=n;++j){
			if(!vis[j]&&d[j]<d[k]){
				k=j;
				d[k]=d[j];
			}
		}
		if(k==t||k==0){
			return;
		}
		vis[k]=true;
		for(int j=1;j<=n;++j){
			if(!vis[j]&&dis[k][j]>0){
				d[j]=min(d[j],d[k]+dis[k][j]);
			}
		}
	}
}
int main(){
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=1;i<=m;++i){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		dis[u][v]=w;
		dis[v][u]=w;
	}
	Dijkstra();
	printf("%d",d[t]);
	return 0;
}
2022/6/17 10:24
加载中...