Pagini recente » Cod sursa (job #1852130) | Cod sursa (job #1498268) | Cod sursa (job #1155738) | Cod sursa (job #2368611) | Cod sursa (job #1649272)
#include <fstream>
#include<climits>
using namespace std;
ifstream fin("dij.in");
ofstream fout("dij.out");
int i,D[1000],T[1000],S[1000],n,x,y,r,z,a[100][100],j,ok1,ok2,k,minim;
int main()
{fin>>n>>r;
while(fin>>x>>y>>z)
a[x][y]=z;
for(i=1;i<=n;i++)
if(i!=r) {
if(a[r][i]) D[i]=a[r][i];
else D[i]=INT_MAX;
}
else D[i]=0;
S[r]=1;
for(i=1;i<=n;i++)
if(a[r][i]) T[i]=r;
else T[i]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]) a[i][j]=INT_MAX;
while(ok1==0&&ok2==0)
{minim=INT_MAX;
for(i=1;i<=n;i++)
if(S[i]==0) if(D[i]<minim) {minim=D[i];k=i;}
S[k]=1;
for(i=1;i<=n&&S[i]==0;i++)
D[i]=min(D[i],D[k]+a[k][i]);
ok1=1; ok2=1;
for(i=1;i<=n;i++)
if(S[i]==0) {ok1=0; if(D[k]!=INT_MAX) ok2=0; }
}
for(i=1;i<=n;i++)
fout<<D[i]<<' ';
return 0;
}