Cod sursa(job #2083637)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 7 decembrie 2017 22:03:05
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <vector>
#include <queue>

#define MAX_N 50000
const int INF = 0x7fffffff;

using namespace std ;

struct Muchie {
  int v; // vecin
  int cost;
};

vector<struct Muchie> muchii[1 + MAX_N];
int dist[1 + MAX_N];

bool inCoada[1 + MAX_N];

void bellmanFord(int s, int n) {
  queue<int> q;
  for(int u = 1; u <= n; u++)
    dist[u] = INF;
  q.push(s);
  inCoada[s] = true;
  dist[s] = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    inCoada[u] = false;
    for (Muchie e : muchii[u]) {
      if (dist[e.v] > dist[u] + e.cost) {
        dist[e.v] = dist[u] + e.cost;
        if (!inCoada[e.v]) {
          inCoada[e.v] = true;
          q.push(e.v);
        }
      }
    }
  }
}

int main() {

  FILE *fin, *fout ;
  fin = fopen ("bellmanford.in", "r" ) ;
  fout = fopen ("bellmanford.out", "w" ) ;

  int n, m, i, nod ;
  Muchie elem ;

  fscanf (fin, "%d%d", &n, &m ) ;

  for (i = 0 ; i < m ; i++ ) {
    fscanf (fin, "%d%d%d", &nod, &elem.v, &elem.cost ) ;
    muchii[nod].push_back (elem) ;
  }

  bellmanFord(1, n);
  for (i = 2 ; i<= n ; i++ )
    fprintf (fout, "%d ", dist[i] ) ;
  return 0;
}