#include<bits/stdc++.h>
using namespace std;
#define int long long
int g[2025][2025];//graph,图
int n,m;
bool bo[2086];//标记是否已经确定到起点的最短距
int i,j;
int dis[2086];//顶点到源点的距离
void dijkstra()
{
bo[head]=true;
int pos;//记录得到minn的位置
int minn;
for(int i=1;i<=n;i++)//n个顶点依次判断
{
minn=0x3f//初始无穷大
for(int j=1;j<=n;j++)
{
if(!bo[j]&&minn>dis[j])
{
pos=j;//记录位置
minn=dis[j];//更新最小值
}
}
//经过这趟for我们找到想要的点
bo[pos]=true;//并入已知集合
for(int j=1;j<=n;j++)
{
if(!bo[j])
dis[j]=min(dis[j],dis[pos]+g[pos][j]);
}
}
}
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
cout.tie(0);
memset(g,0x3f,sizeof(g));
memset(bo,false,sizeof(bo));
memset(g,0x3f,sizeof(g));//三个初始化******
cin>>n>>m;//建图,n个点m条边
//建边 if(i!=j) g[i][j]=g[j][i]=w;,防i==j
cin>>head>>tail//起点与终点
dijkstra();
cout<<dis[tail];//输出终点到起点的最短距
}
/*泛舟沧海,立马昆仑*/
/*若你为了错过太阳而哭泣,那么你也将错过群星了*/
/*红了樱桃,绿了芭蕉*/
/*
3 3
0 3
1 2
0 2
*/
Dijkstra算法模板
最新推荐文章于 2024-07-12 18:56:03 发布