范沐垚


私信TA

用户名:dotcpp0614554

访问量:5274

签 名:

好大喜功

等  级
排  名 196
经  验 6620
参赛次数 0
文章发表 87
年  龄 18
在职情况 学生
学  校 看今夜 小楼灯宴
专  业 尽是良辰美眷

  自我简介:

沽名钓誉

/*
  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分

1 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »