#include<bits/stdc++.h>
using namespace std;
#define inf 999999
int dis[555],mp[555][555],book[555]; // 到起点最短距离 地图 标记已经找到最短路径的顶点
int n,m,s,d; // 顶点数 边数 起点 终点
int x,y,len,w,u,minn;
void dij(int s) // 迪杰斯特拉核心代码
{
for(int i=0;i<n-1;i++)
{
minn=inf;
for(int j=0;j<n;j++)
{
if(dis[j]<minn&&book[j]==0)
{
minn=dis[j];
u=j;
}
}
book[u]=1;
for(int k=0;k<n;k++)
{
if(mp[u][k]<inf)
{
if(dis[k]>dis[u]+mp[u][k])
{
dis[k]=dis[u]+mp[u][k];
}
}
}
}
}
int main()
{
cin>>n>>m>>s>>d;
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
{
mp[i][j]=inf; // 初始化地图
}
for(int i=0;i<m;i++)
{
cin>>x>>y>>len>>w;
mp[x][y]=len; // 输入地图信息
}
for(int i=0;i<n;i++)
{
dis[i]=mp[s][i]; // 初始化dis数组,找到起点到各个点的初始路程
}
dis[s]=0;
book[s]=1;
dij(s);
cout<<dis[d]; // 输出起点到终点的最短距离
return 0;
}
迪杰斯特拉算法求最短路径
最新推荐文章于 2022-03-23 15:13:46 发布