最短路——dijkstra迪杰斯特拉

来源:互联网 发布:新开淘宝店推广申请 编辑:程序博客网 时间:2024/05/18 00:15

#include <iostream>
#include <cstring>

using namespace std;

const int inf = 0x3f3f3f3f;

int dis[1000],g[1000][1000],n,m,s,t;
bool vis[1000];

int dijkstra(int s, int t) {
    memset(dis,inf,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dis[s] = 0;
    while (true) {
        int k = 0;
        for (int i = 1; i<=n; i++) {
            if (!vis[i] && dis[i]<dis[k]) k = i;
        }
        if (!k) break;
        for (int i = 1; i<=n; i++) {
            if (k == i) continue;
            if (!vis[i] && dis[k]+g[k][i]<dis[i]) dis[i] = dis[k]+g[k][i];
        }
        vis[k] = true;
    }
    return dis[t];
}

int main() {
    cin>>n>>m;
    memset(g,inf,sizeof(g));
    for (int i = 0; i<m; i++) {
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b] = min(g[a][b],c);
    }
    cin>>s>>t;
    cout<<dijkstra(s,t)<<endl;
}

0 0
原创粉丝点击