Cod sursa(job #937303)

Utilizator Pcosmin93Posteuca Cosmin Pcosmin93 Data 10 aprilie 2013 01:43:51
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>

#define INFINIT 64000
#define MAX 50001

using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

vector < pair < int , int > > graf[MAX];

void dijkstra(int inceput,int n){

    queue <int> queue_graf;
    unsigned int length[MAX],it;
    int viz[MAX],B,C,nod,i;

    for( i = 1 ; i <= n ; i++ ){
        length[i]=INFINIT;
        viz[i]=0;
    }

    length[inceput]=0;

    queue_graf.push(inceput);

    while(queue_graf.empty()==0){

        nod=queue_graf.front();
        if(viz[nod]==0){
            viz[nod]=1;
            for( it = 0 ; it < graf[nod].size() ; it++ ){

                B=graf[nod][it].first;
                C=graf[nod][it].second;
                if(length[nod]+C<length[B])
                    length[B]=length[nod]+C;
                queue_graf.push(B);

            }
        }
        queue_graf.pop();

    }
    for( i = 2 ; i <= n ; i++ ){

        if(length[i]==INFINIT)
            length[i]=0;
        if(inceput!=i)
            out<<length[i]<<" ";

    }

}

int main(){
    int A,B,C,n,m;

    in>>n>>m;
    for( int j = 1 ; j <= m ; j++ ){

            in>>A>>B>>C;
            graf[A].push_back(make_pair(B, C));

        }

    dijkstra(1,n);
    return 0;
}