Cod sursa(job #724442)

Utilizator morlockRadu Tatomir morlock Data 26 martie 2012 15:55:04
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 50005
#define inf 10000
using namespace std;

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

int n, m, d[nmax], viz[nmax], minim;
vector< pair<int,int> > v[nmax];

void citeste()
{ int x, y, c;

    in>>n>>m;
     for (int i=1; i<=m; ++i)
     {
         in>>x>>y>>c;
         v[x].push_back(make_pair(y,c));
         v[y].push_back(make_pair(x,c));
     }
}

void dijkstra(int nod)
{ int k, gasit = 1;

    viz[nod] = 1;
    for ( unsigned i = 0; i < v[nod].size(); ++i )
     d[ v[nod][i].first ] = v[nod][i].second;

    while ( gasit )
     {
         minim = inf;
         for (int i=1; i<=n; ++i)
          if ( !viz[i] && minim > d[i] )
           {
               minim = d[i];
               k = i;
           }

         if ( minim != inf )
          {
              viz[k] = 1;
              for (unsigned i = 0; i < v[k].size(); ++i)
               if ( !viz[ v[k][i].first ] )
                d[ v[k][i].first ] = min( d[ v[k][i].first ], d[k] + v[k][i].second );
          }
         else gasit = 0;
     }

}

int main()
{
    citeste();

    for (int i=1; i<=n; ++i)
     d[i] = inf;

    dijkstra(1);

    for (int i=2; i<=n; ++i)
     out<<d[i]<<" ";

return 0;
}