Cod sursa(job #662705)

Utilizator SimeneSimene Robert Simene Data 16 ianuarie 2012 22:11:03
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

#define MARE 100000000

using namespace std;

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

int a[1501][1501], sel[1501], d[1501], i, m, n, l, c, nc;

void dijkstra (int s) {
  int min,jmin,dn,j;

  for (i = 2 ; i <= n; i++)
    d[i] = a[s][i];
  sel[s] = 1;
  d[s] = 0;
  for (i = 2; i <= n; i++) {
    min = MARE;
    for (j = 2;j <= n;j++)
      if (sel[j] == 0)
        if (d[j] < min) {
          min = d[j];
          jmin = j;
        }
    sel[jmin] = 1;
    for (j = 2;j <= n;j++)
          if (sel[j] == 0) {
        dn = d[jmin] + a[jmin][j];
        if (dn < d[j])
          d[j] = dn;
      }
  }
}

int main () {
  fi >> n >> m;
  for (l = 1; l <= n; l++)
    for (c = 1; c <= n; c++)
      a[l][c] = MARE;
  for (i = 1; i <= m; i++) {
    fi >> l >> c; fi >> a[l][c];
  }
  dijkstra(1);
  for (i = 2; i <= n; i++) {
    if(d[i]==MARE)
    fo<<"0"<<' ';
    else
    fo << d[i] << ' ';

  }
}