Cod sursa(job #1326771)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 25 ianuarie 2015 22:53:40
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<bits/stdc++.h>
using namespace std;

struct cell
{
    int nod,cost;
};

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

const int NMAX=50005;

int n,m,c[NMAX];
vector<cell>v[NMAX];
vector<cell>::iterator it;
queue<int>Q;
bitset<NMAX>viz;

inline void DIJKSTRA()
{
    int i,aux;
    for (i=2;i<=n;i++) c[i]=1<<30;
    Q.push(1);
    while (!Q.empty())
        {
            aux=Q.front();
            Q.pop();
            if (viz[aux]==0)
            {
                viz[aux]=1;
                for (it=v[aux].begin();it!=v[aux].end();it++)
                    if (c[(*it).nod]>(c[aux]+(*it).cost))
                        {
                            c[(*it).nod]=c[aux]+(*it).cost;
                            viz[(*it).nod]=0;
                            Q.push((*it).nod);
                        }
            }
        }

}

int main()
{
    int i,x;
    cell k;
    fin>>n>>m;
    for (i=1;i<=m;i++)
        {
            fin>>x>>k.nod>>k.cost;
            v[x].push_back(k);
            swap(x,k.nod);
            v[x].push_back(k);
        }
    DIJKSTRA();
    for (i=2;i<=n;i++)
        if (c[i]==(1<<30)) fout<<"0 ";
        else fout<<c[i]<<" ";
    fout<<"\n";
    return 0;
}