Pagini recente » Cod sursa (job #1253338) | Cod sursa (job #1514247) | Cod sursa (job #2334476) | Cod sursa (job #2023049) | Cod sursa (job #1521574)
#include <iostream>
#include <fstream>
#define nmax 101
#define Inf 1000000000
using namespace std;
int A[nmax][nmax],n,m,x,s[nmax],d[nmax],t[nmax];
void initializare()
{
int x1,y1,i,j,c;
cin>>n>>x;
for(i=1; i<=n; i++)
{
for(j=i+1; j<=n; j++)
A[i][j]=A[j][i]=Inf;
}
while(cin>>x1>>y1>>c)
{
A[x1][y1]=c;
}
for(i=1; i<=n; i++)
{
d[i]=A[x][i];
if(A[x][i]<Inf)//
t[i]=x;
}
}
void drum(int y)//afisare drum
{
if(t[y]!=0)
{
drum(t[y]);
cout<<t[y]<<' ';
}
}
int main()
{
freopen("dijkstra.in","rt",stdin);
freopen("dijkstra.out","wt",stdout);
int nr,dmin,im;
int i;
initializare();
s[x]=1;
nr=1;
do
{
dmin=Inf;
for(i=1; i<=n; i++)
if(!s[i] && d[i]<dmin)
{
im=i;
dmin=d[i];
}
if(dmin<Inf)
{
nr++;
s[im]=1;
for(i=1; i<=n; i++)
if(!s[i] && d[i]>d[im]+A[im][i])
{
d[i]=d[im]+A[im][i];
t[i]=im;
}
}
}
while(!(dmin==Inf || nr==n));
for(i=1; i<=n; i++)
if(d[i]==Inf)
cout<<-1<<' ';
else
cout<<d[i]<<' ';
cout<<'\n';
return 0;
}