Cod sursa(job #1609513)

Utilizator ris99Istrate Ruxandra ris99 Data 22 februarie 2016 20:47:09
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#define INF 1683
using namespace std;
ofstream g("dijkstra.out");
int c[50][50],d[50],t[50],use[50],n,m;
void citire()
{ ifstream f("dijkstra.in");
  int i,j,x,y,cost;
  f>>n>>m;
  for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
  if(i==j) c[i][j]=0;
  else c[i][j]=INF;
  while (f>>x>>y>>cost) c[x][y]=cost;
}
void dijkstra ()
{int i,x,min;
 for(i=1;i<=n;i++) d[i]=INF;
 d[1]=0;
 while (1)
 { min=INF;
   for(i=1;i<=n;i++)
   if(!use[i]&&d[i]<min)
   {min=d[i];
    x=i;
   }
   if (min==INF) break;
   use[x]=i;
   for(i=1;i<=n;i++)
   if(d[x]+c[x][i]<d[i])
   {d[i]=d[x]+c[x][i];
    t[i]=x;
   }
   //g<<x<<":";
   //for(i=1;i<=n;i++) g<<d[i]<<" ";
   //g<<endl;
 }

}
void afis (int i)
{if(t[i]) afis(t[i]);
 g<<i<<" ";

}
int main()
{ citire();
  dijkstra();
  for (int i=2;i<=n;i++)
  //if (i!=s)
  //if (d[i]==INF) g<<"nu exista drum de la"<<s<<"la"<<i<<endl;
  //else {afis(i);
        //g<<"de cost";
  if (d[i]!=INF)
        g<<d[i]<<" ";
        else g<<0<<" ";
        //}

    return 0;
}