Cod sursa(job #1696483)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 29 aprilie 2016 11:30:27
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
//bellman-ford cu liste
#include <vector>
#include <fstream>
#define INF 100000005
#define NMAX 50005
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n,p;
vector< pair <int,int> > G[NMAX];
int D[NMAX],t[NMAX];
void citire(){
    cin>>n>>p;
    p=1;
    int i,x,y,z;
    while(cin>>x>>y>>z){
        G[x].push_back(make_pair(y,z));
    }
}
void bellman_ford(){
    int i,j;
    vector< pair<int,int> >::iterator it;
    for(it=G[p].begin();it!=G[p].end();++it){
        D[it->first]=it->second;
        t[it->first]=p;
    }
    for(i=1;i<=n;i++)
        if(D[i]==0){
            D[i]=INF;
            t[i]=0;
        }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            for(it=G[j].begin();it!=G[j].end();++it)
                if(D[j]!=INF)
                    if(D[it->first]>D[j]+it->second){
                        D[it->first]=D[j]+it->second;
                        t[it->first]=j;
                    }
    }
    for(i=1;i<=n;i++)
        if(i==p)
            ;
        else if(D[i]==INF)
            cout<<0<<' ';
        else
            cout<<D[i]<<' ';
}
int main(){
    citire();
    bellman_ford();
    return 0;
}