Pagini recente » Cod sursa (job #2930637) | Cod sursa (job #1830038) | Cod sursa (job #1805901) | Cod sursa (job #1069451) | Cod sursa (job #1582586)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 50005
#define Inf 1000000000
using namespace std;
int n,m,startNode;
vector<int> d;
vector<bool> viz;
vector< vector<int> > A;
void initializare()
{
int x,y,i,c;
cin>>n>>m;
d.assign(n+2,Inf);
for(int i=0;i<=n;i++)
A.push_back(d);
while(cin>>x>>y>>c)
A[x][y]=c;
for(i=1; i<=n; i++)//Distantele initiale de la nodul 1 la celelalte noduri din graf
d[i]=A[startNode][i];
}
void Dijkstra()
{
int nrDistanteRezolvate,dmin,im,i;
viz.assign(n+2,0);
viz[startNode]=1;
nrDistanteRezolvate=1;
do
{
dmin=Inf;
for(i=1; i<=n; i++)
if(!viz[i] && d[i]<dmin)
{
im=i;
dmin=d[i];
}
if(dmin<Inf)
{
nrDistanteRezolvate++;
viz[im]=1;
for(i=1; i<=n; i++)
if(!viz[i] && d[i]>d[im]+A[im][i])
d[i]=d[im]+A[im][i];
}
}
while(!(dmin==Inf || nrDistanteRezolvate==n));
for(i=2; i<=n; i++)
if(d[i]==Inf)
cout<<0<<' ';
else
cout<<d[i]<<' ';
cout<<'\n';
}
int main()
{
freopen("dijkstra.in","rt",stdin);
freopen("dijkstra.out","wt",stdout);
startNode=1;
initializare();
Dijkstra();
}