老师上课带我们讲了迪杰斯特拉算法求图的最短路,但我没理解是怎么实现的。
求洛谷中的大佬指点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;
}