Cod sursa(job #1856631)

Utilizator ioan_cernovshi00Cernovschi Ioan ioan_cernovshi00 Data 25 ianuarie 2017 10:33:53
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;
ofstream g("dijkstra.out");
ifstream f("dijkstra.in");
long  v,n,m,d[50000],s[50000],t[50000],poz;
long c[5000][5000];
void citire()
{ f>>n>>m;
for(int i=1;i<=m;i++)
 { int x,y,cost;
   f>>x>>y>>cost;
   c[x][y]=c[y][x]=cost;
 }
for(int i=1;i<=n;i++)
 for(int j=1;j<=n;j++)
  if(i!=j && c[i][j]==0)
   c[i][j]=c[j][i]=32000;
}

void dijkstra()
{ v=1;
s[v]=1;
for(int i=1;i<=n;i++)
 { d[i]=c[v][i];
   if(c[v][i]!=32000 && i!=v)
    t[i]=v; }

for(int k=1;k<n;k++)
 {int min=32000;
 for(int j=1;j<=n;j++)
  if(d[j]<min && s[j]==0)
   { min=d[j];
     poz=j; }
s[poz]=1;
 for(int i=1;i<=n;i++)
  if(s[i]==0 && c[poz][i]!=32000)
   if(d[i]>d[poz]+c[poz][i])
    { d[i]=d[poz]+c[poz][i];
      t[i]=poz; }
 }
}
int main()
{ citire();
dijkstra();
for(int i=1;i<=n;i++)
 if(i!=v)
  { g<<d[i]<<" "; }
}