/*
  3 3
  1 2 2
  2 3 1
  1 3 4
 */                  //找到到达起点的最短路
#include<iostream>
#include<cstring>
using namespace std;
const int N=500;
int g[N][N],dist[N],n,m;            //g存图  dist存各点到起点最短距离
bool st[N];                        //标记已经走过
int dijkstra()
{
    memset(dist,0x3f,sizeof(dist));      //初始化所有点到起点的距离为正无穷
    dist[1]=0;                         //起点到起点的距离为0
    for(int i=1;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;                        //标记
        
        for(int j=1;j<=n;j++) {
            dist[j] = min(dist[j], dist[t] + g[t][j]);       //用 找到的最短的点 更新其他点
        }

    }
    if(dist[n]==0x3f3f3f)
        return -1;
    else
        return dist[n];
}
int main(void)
{
    memset(g,0x3f,sizeof(g));               //初始化所有点间的距离为正无穷
    cin>>n>>m;
    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;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论