Pagini recente » Rating Braga Sergiu (Seriojka_b) | Cod sursa (job #1613695)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int m[1001][1001],d[1001],s[1001],t[1001];
void drum(int i)
{
if(t[i])
drum(t[i]);
g<<i<<" ";
}
int main()
{
int n,p,i,j,a,b,c,poz,mini=9999,nr;
f>>n>>p;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j) m[i][j]=0;
else m[i][j]=9999;
while(f>>a>>b>>c)
m[a][b]=c;
for(i=1;i<=n;i++)
{
d[i]=m[p][i];
t[i]=p;
}
s[p]=1;
d[p]=0;
for(nr=1;nr<=n-1;nr++)
{
mini=9999;
for(i=1;i<=n;i++)
if(s[i]==0&&d[i]<mini)
{
mini=d[i];
poz=i;
}
s[poz]=1;
for(i=1;i<=n;i++)
if(d[i]>d[poz]+m[poz][i])
{
d[i]=d[poz]+m[poz][i];
t[i]=poz;
}
}
for(i=1;i<=n;i++)
if(d[i]==9999) d[i]=-1;
for(i=1;i<=n;i++)
g<<d[i]<<" ";
return 0;
}