Cod sursa(job #714342)

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

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

vector< pair<int,int> > v[nmax];
int n, m, cost[nmax], L, s[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 bfs(int nod)
{
    L = 1;
    s[L] = nod;
    cost[nod] = 0;

    for (int i = 1; i <= L; ++i)
     {
         for (unsigned j = 0; j < v[i].size(); ++j)
          {
              if ( cost[ v[ s[i] ][j].first ] == -1 )
               {
                   s[++L] = v[i][j].first;
                   cost[ s[L] ] = cost[ s[i] ] + v[ s[i] ][j].second;
               }
               else
                cost[ v[ s[i] ][j].first ] = min( cost[ v[ s[i] ][j].first ], cost[ s[i] ] + v[ s[i] ][j].second );
          }
     }
}

int main()
{
    citeste();


    for (int i=1; i<=n; ++i)
     cost[i] = -1;

    bfs(1);

    for (int i=2; i<=n; ++i)
     if ( cost[i] == -1 ) cout<<"0 ";
      else cout<<cost[i]<<" ";

return 0;
}