dijkstra

朴素版

复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 505, INF = 0x3f3f3f3f;
int n, m, g[N][N], dis[N];
bool vis[N];
int dijkstra()
{
    memset(dis, 0x3f, sizeof dis);
    dis[1] = 0;
    for(int i = 0; i < n; i ++ )
    {
        int t = -1;
        for(int j = 1; j <= n; j ++ )
            if(!vis[j] && (t == -1 || dis[j] < dis[t])) t = j;
        
        vis[t] = true;

        for(int j = 1; j <= n; j ++ )
            dis[j] = min(dis[j], dis[t] + g[t][j]);
    }

    if(dis[n] == INF) return -1;
    return dis[n];
}
int main()
{
    memset(g, 0x3f, sizeof g);
    cin >> n >> m;
    while(m -- )
    {
        int ff, tt, ll;
        cin >> ff >> tt >> ll;
        g[ff][tt] = min(g[ff][tt], ll);
    }

    cout << dijkstra() << endl;


    return 0;
}
复制代码

 堆优化版

复制代码
#include<bits/stdc++.h>
using namespace std;
#define mp(a, b) make_pair(a, b)
typedef pair<int, int> PII;
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
struct edge{
    int t, l, n;
    edge(){}
    edge(int tt, int ll, int nn){
        t = tt, l = ll, n = nn;
    }
}e[N];
int n, m, h[N], idx;
int dis[N];
bool vis[N];

int dijkstra()
{
    memset(dis, 0x3f, sizeof dis);
    priority_queue<PII, vector<PII>, greater<PII> > q;
    dis[1] = 0;
    q.push(mp(dis[1], 1));
    while(!q.empty())
    {
        PII t = q.top();
        q.pop();
        int ver = t.second, dist = t.first;
        if(vis[ver]) continue;
        vis[ver] = true;
        for(int i = h[ver]; ~i; i = e[i].n)
        {
            int tt = e[i].t, ll = e[i].l;
            if(vis[tt] || dis[tt] <= dist + ll) continue;
            dis[tt] = dist + ll;
            q.push(mp(dis[tt], tt));
        }
    }
    if(dis[n] == INF) return -1;
    return dis[n];
}

void addEdge(int ff, int tt, int ll)
{
    e[idx] = edge(tt, ll, h[ff]);
    h[ff] = idx ++ ;
}

int main()
{
    cin >> n >> m;
    memset(h, -1, sizeof h);
    while(m -- )
    {
        int ff, tt, ll;
        cin >> ff >> tt >> ll;
        addEdge(ff, tt, ll);
    }
    cout << dijkstra() << endl;

    return 0;
}
复制代码

 

posted @   ginkgozyf  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示