Cod sursa(job #468715)

Utilizator yrarBogdan Ionut yrar Data 4 iulie 2010 19:33:58
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#define nmax 50 000
using namespace std;

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

int U[nmax], D[nmax], C[nmax][nmax], N, M;

void dijkstra()
{
     int min, nod, i;
     while(1)
     {
         min = INF;
         nod = -1;
         for(i=1; i<=N; ++i)
         {
            if(!U[i] && min > D[i])
            {
                     min = D[i];
                     nod = i;
            }
         }
         if(min == INF) break;
         U[nod] = 1;
         
         for(i=1; i<=N; ++i)
            if(D[i] > D[nod] + C[nod][i])
            {
                    D[i] = D[nod] + C[nod][i];
                    // T[i] = nod;
            }
     }
}

int main()
{
    int i, x, y, c;
    f >> N >> M;
    for(; M>0; --M)
    {
          f >> x >> y >> c;
          C[x][y] = c;
    }
    dijkstra(1);
    for(i=2; i<=N; ++i)
        g << D[i] << " ";
    return 0;
}