Pagini recente » Cod sursa (job #187663) | Cod sursa (job #2250602) | Cod sursa (job #605521) | Cod sursa (job #1759402) | Cod sursa (job #228641)
Cod sursa(job #228641)
// http://infoarena.ro/problema/dijkstra Punctaj:
#include <fstream.h>
const float Pinf=1.e20;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,k,t[100],s[100];
float a[100][100],d[100];
void citire()
{
int x,y;
float c;
fin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
a[i][j]=Pinf;
a[i][i]=0;
}
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
a[x][y]=c;
}
}
void dijkstra(int x)
{
float min=Pinf;
s[x]=1;
for(int i=1;i<=n;i++)
{
d[i]=a[x][i];
if(d[i]!=0 && d[i]!=Pinf)
t[i]=x;
}
for(i=1;i<n;i++)
{
min=Pinf;
for(int j=1;j<=n;j++)
if(d[j]<min && s[j]!=1 && d[j]!=0)
{
min=d[j];
k=j;
}
s[k]=1;
for(j=1;j<=n;j++)
if(s[j]!=1 && d[j]>d[k]+a[k][j])
{
d[j]=d[k]+a[k][j];
t[j]=k;
}
}
}
void afisare()
{
for(int i=2;i<=n;i++)
if(d[i]!=Pinf)
fout<<d[i]<<' ';
else fout<<0<<' ';
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}