Cod sursa(job #721773)

Utilizator morlockRadu Tatomir morlock Data 24 martie 2012 09:20:42
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <queue>
#define nmax 100005
using namespace std;

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

int n, m, cost[nmax];

queue<int> s;
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 bfs(int nod)
{
    cost[nod] = 0;
    s.push(nod);

    while( !s.empty() )
     {
         for ( unsigned i = 0; i < v[ s.front() ].size(); ++i )
          {
              if ( cost[ v[ s.front() ][i].first ] == -1 )
               {
                   cost[ v[ s.front() ][i].first ] = cost[ s.front() ] + v[ s.front() ][i].second;
                   s.push( v[ s.front() ][i].first );
               }
               else
                cost[ v[ s.front() ][i].first ] = min( cost[ v[ s.front() ][i].first ], cost[ s.front() ] + v[ s.front() ][i].second );
          }
          s.pop();
     }

}

int main()
{
    citeste();

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

    bfs(1);

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

return 0;
}