Cod sursa(job #1503524)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 16 octombrie 2015 13:36:21
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <vector>
#include <queue>
#define nmax 1000
#define inf 0x3f3f3f3f

using namespace std;

vector <pair<int,int> > graph[nmax];
int d[nmax],n,m,x=1,t[nmax];
priority_queue <pair<int,int> > Q;

int main(){
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d ",&n,&m);
    int a,b,c;
    for(int i=1;i<=m;i++){
        scanf("%d %d %d ",&a,&b,&c);
        graph[a].push_back(make_pair(c,b));
        graph[b].push_back(make_pair(c,a));
    }
    for(int i=1;i<=n;i++){
            if(i!=x)d[i]=inf;
            else d[i]=0;
            Q.push(make_pair(-d[i],i));
    }
    int u;
    while(!Q.empty()){
        u=Q.top().second;
        Q.pop();
        for(vector <pair<int,int> > :: iterator it=graph[u].begin();it!=graph[u].end();++it){
            if(d[u]+it->first<d[it->second]){
                d[it->second]=d[u]+it->first;
                t[it->second]=u;
            }
        }
    }
    for(int i=2;i<=n;i++)printf("%d ",d[i]);
    return 0;
}