AcWing 849. Dijkstra求最短路I

这一生的挚爱 提交于 2020-01-31 22:39:49
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int N=510,INF=0x3f3f3f3f;
int n,m;
int g[N][N],dist[N];//dist[i]:点1到i的距离
bool st[N];//点是否加入了集合
int dijkstra()
{
    memset(dist,0x3f,sizeof(dist));//将所有点设为不可达
    dist[1]=0;
    for(int i=0;i<n;i++)//n次操作
    {
        int t=-1;
        for(int j=1;j<=n;j++)
        {
            if(!st[j]&&(t==-1||dist[t]>dist[j]))//点未在集合中且距离集合
            									//最近
            {
                t=j;
            }
        }
        st[t]=true;//t点加入集合中
        for(int j=1;j<=n;j++)
        {
            dist[j]=min(dist[j],dist[t]+g[t][j]);//更新距离
        }
    }
    if(dist[n]>=0x3f3f3f3f) return -1;
    return dist[n];
}
int main()
{
    cin>>n>>m;
    memset(g,0x3f,sizeof g);
    while(m--)
    {
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b]=min(g[a][b],c);
    }
    int t=dijkstra();
    cout<<t<<endl;
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!