Pagini recente » Cod sursa (job #1171437) | Cod sursa (job #1768268) | Cod sursa (job #2066528) | Cod sursa (job #2035656) | Cod sursa (job #1082953)
#include<iostream>
#include<fstream>
#define infin 10000000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int d[50001],viz[50001],n,m,C[20001][20001];
void read ()
{ int x,y,cost;
in>>n>>m;
for(int i=1;i<=n; ++i)
for(int j=1; j<=n; ++j)
if(i==j)
C[i][j]=0;
else
C[i][j]=infin;
for(int i=1; i<=m; i++)
{ in>>x>>y>>cost;
C[x][y]=cost;
}
}
void dijkstra (int nod)
{ int ok,min,k;
for(int i=1; i<=n; ++i)
{ d[i]=C[nod][i];
viz[i]=0;
}
ok=1;
viz[nod]=1;
while(ok)
{
min=infin;
for(int i=1; i<=n; i++)
if(min>d[i] && !viz[i])
{
min=d[i];
k=i;
}
if(min!=infin)
{
viz[k]=1;
for(int i=1; i<=n; i++)
if(viz[i]==0 && d[i]>d[k]+C[k][i])
{ d[i]=d[k]+C[k][i];
}
}
else
ok=0;
}
}
int main ()
{
read();
dijkstra(1);
for(int i=2; i<=n; i++)
cout<<d[i]<<" " ;
in.close();
out.close();
return 0;
}