Cod sursa(job #933064)

Utilizator Bogdan13Bogdan Stoian Bogdan13 Data 29 martie 2013 16:09:28
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
#include<vector>
#include<queue>
#define NMAX 50005
#define INF 999999
using namespace std;

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

long N,M,d[NMAX],viz[NMAX];

struct muchie{ long x,cst;};
vector<muchie>L[NMAX];

struct comp{
bool operator() (long i,long j)
{
   return d[i]>d[j];
}
};

priority_queue<long,vector<long>,comp> q;

void drum()
{
    d[1]=0;
    q.push(1);
    viz[1]=1;
    long k;

    while(!q.empty())
          {
                k=q.top();
                q.pop();
                viz[k]=0;

                for (unsigned int i=0;i<L[k].size();i++)
                    if (d[L[k][i].x]>d[k]+L[k][i].cst)
                      {d[L[k][i].x]=d[k]+L[k][i].cst;

                      if (viz[L[k][i].x]) continue;
                      viz[L[k][i].x]=1;
                      q.push(L[k][i].x);
                      }


          }

}


int main()
{
    f>>N>>M;
    for (long i=1;i<=M;i++)
    {
        int nod;
        muchie y;

        f>>nod>>y.x>>y.cst;
        L[nod].push_back(y);
    }

    for (int i=1;i<=N;i++)
    d[i]=INF;
    drum();

    for (long i=2;i<=N;i++)
    if(d[i]==INF)
    g<<"0 ";
    else
    g<<d[i]<<" ";

return 0;
}