Cod sursa(job #869241)

Utilizator erik95Scharscher Erik erik95 Data 1 februarie 2013 10:06:16
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<fstream> 
#define MARE 100000000
 using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
 
int a[1501][1501],s[1501],d[1501],i,m,n,l,c;
 
void dijkstra (int linie) {
    int min, dmin, jmin, j;
 
    for (i = 1; i <= n; i++)
        d[i] = a[linie][i];     
    s[linie] = 1; 
    d[linie] = 0;   
    for (i = 2; i <= n; i++) {
        min = MARE;
        for (j = 1; j <= n; j++) 
            if (!s[j])           
                if (min > d[j]) {    
                    min = d[j];        
                    jmin = j;          
                }
        s[jmin] = 1; 
        for (j = 1; j <= n; j++)     
            if (!s[j]) {             
                dmin = d[jmin]+a[jmin][j]; 
                if (d[j] > dmin)          
                    d[j] = dmin;             
            }
    }
}
 
int main () {
    f >> n >> m;
    for (l = 1; l <= n; l++)
        for (c = 1; c <= n; c++)
            a[l][c] = MARE;
    for (i = 1; i <= m; i++) {
        f >> l >> c;
		f >> a[l][c];
    }
    dijkstra(1);
    for (i = 2; i <= n; i++) {
      if (d[i] == MARE)
      g << "0 ";
    else
      g << d[i] << ' ';
    }
}