Cod sursa(job #856347)

Utilizator cameleonGeorgescu Dan cameleon Data 16 ianuarie 2013 12:35:28
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define Nmax 50005
#define INF 0x3f
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct arc{
int v,c;
};
vector<arc> a[Nmax];
int n, d[Nmax];

void citire()
{
    int m,i,x,y,c;
    arc z;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        z.v=y;z.c=c;
        a[x].push_back(z);
    }

}
void afis()
{
    vector<arc>::iterator it;
    int i;
    for(i=1;i<=n;i++){g<<i<<": ";
        for(it=a[i].begin();it!=a[i].end();it++)
            g<<it->v<<" "<<it->c<<'\n';
    }
}
void BF()
{
    queue<int> q;
    bool eq[Nmax];
    int x;
    vector<arc>::iterator it;
    memset(d,INF,sizeof(d));
    memset(eq,false,sizeof(eq));
    q.push(1);d[1]=0;
    while(!q.empty())
    {
        x=q.front();q.pop();
        for(it=a[x].begin();it!=a[x].end();++it)
            if(d[it->v]>d[x]+it->c)
                {
                    d[it->v]=d[x]+it->c;
                    if(!eq[it->v])
                    {
                        q.push(it->v);
                        eq[it->v]=true;
                    }

                }
    }

}
void afisare()
{
    int i;
    for(i=2;i<=n;++i)
        if(d[i]==INF)g<<0<<' ';
        else g<<d[i]<<' ';
    g<<'\n';
}
int main()
{
    citire();
    BF();
    afisare();
    return 0;
}