Dijkstra算法 朴素版

#include<iostream>
#include<string.h>
using namespace std;
int n,m;
const  int N=5100;
const   int M=100010;
int st[N],d[N];
int g[N][N];
int dijkstra()
{
   
    memset(d,0x3f,sizeof(d));
    d[1]=0;
    for(int i=1;i<=n;i++)
    {
   
        int t=-1;
        for(int j=1;j<=n;j++)
        if(!st[j]&&(t==-1||d[t]>d[j]))
                t=j;
        st[t]=1;
        for(int j=1;j<=n;j++)
        d[j]=min(d[j],d[t]+g[t][j]);
    }
    if(d[n]==0x3f3f3f3f)    return -1;
    else    return d[n];
}
int main()
{
   
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    if(i==j)    g[i][j]=0;
    else    g[i][j]=0x3f3f3f3f;
    while(m--)
    {
   
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b]=min(g[a][b],c);
    }
    int t=dijkstra();
    printf("%d\n",t);
    return 0;
}
全部评论

相关推荐

07-22 11:35
门头沟学院 Java
谁知道这是为什么吗,有没有懂的佬给讲讲
理智的小饼干又熬夜了:鹅打电话问我参不参加后台提前批,说是有的但还没放官网
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务