Pagini recente » Cod sursa (job #1912894) | Cod sursa (job #554712) | Cod sursa (job #1763299) | Cod sursa (job #1171425) | Cod sursa (job #2552642)
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M;
int Cost[50001];
unsigned Grad[50001];
bool Viz[50001];
vector< pair<int,int> >Ad[50001];
void citire()
{
int x,y,z;
fin>>N>>M;
for(int i=1;i<=N;i++)
Cost[i]=INF;
for(int i=1;i<=M;i++)
{
fin>>x>>y>>z;
Ad[x].push_back({y,z});
Grad[x]++;
}
}
void dijkstra(int x)
{
queue<int>Q;
int P;
Viz[x]=1;
Cost[x]=0;
Q.push(x);
while(!Q.empty())
{
P=Q.front();
Viz[P]=0;
Q.pop();
for(unsigned i=0;i<Grad[P];i++)
if(Cost[Ad[P][i].first]>Cost[P]+Ad[P][i].second)
{
Cost[Ad[P][i].first]=Cost[P]+Ad[P][i].second;
if (!Viz[Ad[P][i].first])
{
Viz[Ad[P][i].first]=1;
Q.push(Ad[P][i].first);
}
}
}
}
void afisare()
{
for(int i=2;i<=N;i++)
if(Cost[i]==INF)
fout<<0<<" ";
else
fout<<Cost[i]<<" ";
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}