Pagini recente » Cod sursa (job #489946) | Cod sursa (job #1715897) | Cod sursa (job #1745749) | Atasamentele paginii Clasament oji_2013 | Cod sursa (job #1331019)
#include <fstream>
#define inf 1<<15-1
using namespace std;
int i,m,n,pred[250001],viz[250001],d[250001],k,mini,a,b,c,j;
long long x[2501][2501];
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
int minim (int &k)
{
int i,m=inf*2;
for(i=1;i<=n;i++)
{
if(viz[i]==0 && d[i]<m)
{
m=d[i];
k=i;
}
}
return m;
}
void dijkstra()
{
int nr=1,ok=1,k=2;
while(nr<n && ok==1)
{
mini=minim(k);
if(mini<inf)
{
viz[k]=1;nr++;
for(i=1;i<=n;i++)
if(viz[i]==0 && d[k]+x[k][i]<d[i])
{
d[i]=d[k]+x[k][i];
pred[i]=k;
}
}
else ok=0;
}
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
x[i][j]=0;
else
x[i][j]=inf;
for(i=1;i<=m;i++)
{
f>>a>>b>>c;
x[a][b]=c;
x[b][a]=c;
}
d[1]=0;
pred[1]=0;
viz[1]=1;
for(i=2;i<=n;i++)
if(x[1][i]!=0)
{
d[i]=x[1][i];pred[i]=1;
}
else
d[i]=inf;
dijkstra();
for(i=2;i<=n;i++)
g<<d[i]<<" ";
return 0;
}