Cod sursa(job #632589)

Utilizator yamahaFMI Maria Stoica yamaha Data 11 noiembrie 2011 18:34:16
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<cstring>
using namespace std;
#define MAX_N 10000
#define INF 0x3f3f
int N,M,i,C[MAX_N][MAX_N],D[MAX_N],T[MAX_N];
char U[MAX_N];

void dijkstra(int sursa)
{
     int i,min,nod;
     memset(U,0,sizeof(U));
     memset(T,0,sizeof(T));
     memset(D,63,sizeof(D));
     D[sursa]=0;
     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 ()
{
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    f>>N>>M;
    int j,c;
     for(i=1;i<=N;i++)
          for(j=1;j<=M;j++) C[i][j] = (i!=j)*INF;
     for(;M>0;M--)
     {
          f>>i>>j>>c;
          C[i][j]=c;
     }
    dijkstra(1);
    for(i=2;i<=N;i++) g<<D[i]<<" ";

     f.close(); g.close();
     return 0;
}