Cod sursa(job #1082953)

Utilizator Bigb21Avram Bogdan Bigb21 Data 15 ianuarie 2014 13:27:19
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<iostream>
#include<fstream>
#define infin 10000000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int d[50001],viz[50001],n,m,C[20001][20001];
void read ()
{ int x,y,cost;
     in>>n>>m;
     for(int i=1;i<=n; ++i)
          for(int j=1; j<=n; ++j)
            if(i==j)
              C[i][j]=0;
                else
             C[i][j]=infin;
 for(int i=1; i<=m; i++)
 {  in>>x>>y>>cost;
    C[x][y]=cost;
 }
}

void dijkstra (int nod)
{   int ok,min,k;
     for(int i=1; i<=n; ++i)
     {  d[i]=C[nod][i];
        viz[i]=0;


     }

     ok=1;
     viz[nod]=1;

     while(ok)
     {
          min=infin;
          for(int i=1; i<=n; i++)
              if(min>d[i] && !viz[i])
              {
                  min=d[i];
                  k=i;
              }

              if(min!=infin)
              {
                  viz[k]=1;
                  for(int i=1; i<=n; i++)
                      if(viz[i]==0 && d[i]>d[k]+C[k][i])
                   {    d[i]=d[k]+C[k][i];

                   }
              }
              else
                ok=0;
     }

}
int main ()
{
      read();
      dijkstra(1);
      for(int i=2; i<=n; i++)
            cout<<d[i]<<" " ;

      in.close();
      out.close();
      return 0;

}