Cod sursa(job #1041766)

Utilizator miha88Popescu Mihaela miha88 Data 26 noiembrie 2013 07:58:01
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct nod{
    int vf,l;};
vector <nod> v[50003];
int d[50003],n,m;
int eq[50003];
void citire()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
        {
            int a,b,c;
            f>>a>>b>>c;
            nod y;
            y.vf=b;
            y.l=c;
            v[a].push_back(y);
        }
    d[1]=0;
    for(int i=2;i<=n;i++)
        d[i]=2000000000;
}
void bfs (int x)
{
 nod y;
queue<int>q;
q.push(x);
eq[x]=1;
while(!q.empty() )
{
    x=q.front();
    q.pop();
    eq[x]=0;
    for(int i=0;i<v[x].size();i++)
        {
            y=v[x][i];
            if(d[y.vf]>d[x]+y.l){
                d[y.vf]=d[x]+y.l;
                if(eq[y.vf]==0)
                    {q.push(y.vf);
                    eq[y.vf]=1; }
            }
        }
}
}
int main()
{
    citire();
    bfs(1);
    for(int i=2;i<=n;i++)
        if(d[i]!=2000000000)
        g<<d[i]<<' ';
        else
        g<<0<<' ';
    return 0;
}