Cod sursa(job #1122990)

Utilizator toncuvasileToncu Vasile toncuvasile Data 25 februarie 2014 21:46:50
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
// Infoarena. Arhiva Educationala. Infoarena. Algoritmul Dijkstra.
#include<iostream>
#include<fstream>
#include<limits>
using namespace std;

#define INF 300000000

void init();
void dijkstra();
int N,M,dist[20000][20000],D[50000],visit[50000];


int  main(){
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    cin>>N>>M;
    init();

    dijkstra();
    for(int i=2;i<=N;i++) cout<<D[i]<<" ";




}

void init(){
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++)
            if(i!=j) dist[i][j]=INF;

    int x,y,value;
    for(int i=1;i<=M;i++){
        cin>>x>>y>>value;
        dist[x][y]=value;
    }

    for(int i=2;i<=N;i++){
        D[i]=dist[1][i];
        visit[i]=0;
    }
    visit[1]=1;
}

void dijkstra(){
    for(int k=1;k<N;k++){
        int minim=INF,aux;
        for(int i=2;i<=N;i++)
            if(D[i]<minim && !visit[i]){
                minim=D[i];
                aux=i;
            }

        visit[aux]=1;
        for(int i=2;i<=N;i++){
            if(D[i]>D[aux]+dist[aux][i] && !visit[i])
                D[i]=D[aux]+dist[aux][i];
        }
    }
}