849. Dijkstra求最短路 I(Acwing Dijkstra朴素板子)

849. Dijkstra求最短路 I

#include <bits/stdc++.h>
using namespace std;

const int N = 510;
int g[N][N], dis[N];
bool st[N];
int n, m;

int dijkstra(){
    memset(dis, 0x3f, sizeof dis);
    dis[1] = 0;
    for(int i = 1; i <= n; ++i){
        int t = -1;
        for(int j = 1; j <= n; ++j)
            if(!st[j] && (t == -1 || dis[j] < dis[t])) 
                t = j;
            
        st[t] = true;
        for(int j = 1; j <= n; ++j)
            dis[j] = min(dis[j], dis[t] + g[t][j]);
    }
    if(dis[n] == 0x3f3f3f3f) return -1;
    return dis[n];
}

signed 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;
}
posted @ 2025-03-22 11:15  awei040519  阅读(13)  评论(0)    收藏  举报