Cod sursa(job #933684)

Utilizator SoulSylverAndrei Ghiuzan SoulSylver Data 30 martie 2013 11:52:51
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<iostream>
#include<fstream>
#include<limits.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define N 2000
int a[N][N],d[N],v[N],t[N],m,n,nod=1;
#define inf INT_MAX/2
void cit(){
    in>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(!a[i][j] && i!=j)
                a[i][j]=inf;
    for(int i=1;i<=m;i++){
        int x,y,c;
        in>>x>>y>>c;
        a[x][y]=c;
    }
}
void dij(){
    for(int i=1;i<=n;i++){
        d[i]=a[nod][i];
        if(d[i]!=inf)
            t[i]=nod;
    }
    v[nod]=1;
    t[nod]=0;
    int k=n-1;
    while(k--){
        int dmin=inf,y;
        for(int i=1;i<=n;i++)
        if(!v[i] && d[i]<=dmin){
            dmin=d[i];
            y=i;
        }
        v[y]=1;
        for(int i=1;i<=n;i++){
            if(v[i])
                continue;
            int nd=d[y]+a[y][i];
            if(nd<d[i]){
                d[i]=nd;
                t[i]=y;
            }
        }
    }
}
int main(){
    cit();
    dij();
    for(int i=2;i<=n;i++)
        if(d[i]==inf)
            out<<0<<' ';
        else
            out<<d[i]<<' ';
    return 0;
}