Mai intai trebuie sa te autentifici.
Cod sursa(job #264146)
Utilizator | Data | 21 februarie 2009 16:08:40 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.85 kb |
#include<fstream.h>
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,a[100][100],min,t[1000],q[1000],p=1,u,s[1000];
long d[1000];
int vf()
{ long min,x,i,j;
min=32000;
for(i=1;i<=n;i++)
if(q[i]==1) for(j=1;j<=n;j++)
if(s[j]==0) if(a[i][j]<min){ min=a[i][j];
x=i;
}
q[x]=0;
p++;
return x;
}
int main()
{ int x,y,z,i,j;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=32000;
for(i=1;i<=m;i++)
{ fin>>x>>y>>z;
a[x][y]=z;
}
for(i=1;i<=n;i++)
{ d[i]=32000;
t[i]=-1;
q[i]=1;
}
d[1]=0;
while(p<=n)
{ if(p>1) u=vf();
else { u=1;
p++;
}
s[u]=1;
for(i=1;i<=n;i++)
if(d[i]>d[u]+a[u][i])
{ d[i]=d[u]+a[u][i];
t[i]=u;
}
}
for(i=2;i<=n;i++)
fout<<d[i]<<" ";
fin.close();
fout.close();
return 0;
}