Cod sursa(job #1299953)

Utilizator Vele_GeorgeVele George Vele_George Data 23 decembrie 2014 22:48:17
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf (1<<30)
using namespace std;

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

struct perechi{

    int nod,cost;

}aux;

vector< vector < perechi > > graf;
queue <int> Q;
vector<int> dist;
vector<bool> inq;

void dijkstra(){

    Q.push(1);
    dist[1]=0;

    while(!Q.empty()){
        int nod1=Q.front();
        Q.pop();
        inq[nod1]=false;
        for(int nod2=0; nod2<graf[nod1].size(); nod2++)

            if (dist[graf[nod1][nod2].nod] > dist[nod1]+graf[nod1][nod2].cost){
                dist[graf[nod1][nod2].nod] = dist[nod1]+graf[nod1][nod2].cost;
                if(!inq[graf[nod1][nod2].nod]){
                    Q.push(graf[nod1][nod2].nod);
                    inq[graf[nod1][nod2].nod]=true;
                }
            }

    }

}




int main()
{
    int n,m,x,y,c;
    f>>n>>m;
    graf.resize(n+1);
    for(int i=0; i<=n; i++){
        inq.push_back(false);
        dist.push_back(inf);
    }
    for(int i=0; i<m; i++){
        f>>x>>y>>c;
        aux.nod=y;
        aux.cost=c;
        graf[x].push_back(aux);
    }

    dijkstra();

    for(int i=2; i<=n; i++ )
        if (dist[i]==inf) g<<"0 ";
        else g<<dist[i] << " ";

    return 0;
}