Cod sursa(job #1414878)

Utilizator eneandradaEne Oana-Andrada eneandrada Data 3 aprilie 2015 11:05:18
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>

using namespace std;

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

#define MAX_N 50005

vector <int> G[MAX_N], C[MAX_N];
queue <int> Q;
bitset <MAX_N> viz;
int d[MAX_N],N,M;

void bfs(int nod)
{
    while(Q.empty()==0)
    {
        nod=Q.front();
        for(int i=0;i<G[nod].size();i++)
            {
                if( viz[G[nod][i]]==0 && d[G[nod][i]]>(d[nod]+C[nod][i]) )
                {
                    d[G[nod][i]]=d[nod]+C[nod][i];
                    Q.push(G[nod][i]);
                    viz[G[nod][i]]==1;
                }
            }
        viz[nod]=0;
        Q.pop();
    }
}

int main()
{
    f>>N>>M;
    int a,b,cost;
    for(int i=1;i<=M;i++)
    {
        f>>a>>b>>cost;
        G[a].push_back(b);
        G[b].push_back(a);
        C[a].push_back(cost);
        C[b].push_back(cost);
    }
    Q.push(1); viz[1]=1; d[1]=0;
    for(int i=2;i<=N;i++)
        d[i]=1000*i+5;
    bfs(1);
    for(int i=2;i<=N;i++)
        g<<d[i]<<" ";
    return 0;
}