Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/cristiciotei | Cod sursa (job #951231) | Cod sursa (job #2034969) | Cod sursa (job #989862)
Cod sursa(job #989862)
#include <fstream>
#include <vector>
#define INF 1<<30
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector <pair<int,int> > G[50002];
int N,M,D[50002];
bool Use[50002];
void Read()
{
int i;
f>>N>>M;
for(i=1;i<=M;i++)
{
int x,y,cost;
f>>x>>y>>cost;
G[x].push_back(make_pair(y,cost));
}
for(i=2;i<=N;i++)
D[i]=INF;
}
int count_min()
{
int min=INF,i,pozition;
for(i=1;i<=N;i++)
if(min>D[i] && Use[i]==0)
{
min=D[i];
pozition=i;
}
return pozition;
}
void Solve()
{
int i,counter=0;
while(counter<N)
{
int pozition=count_min();
Use[pozition]=1;
counter++;
for(i=0;i<G[pozition].size();i++)
{
int vecin=G[pozition][i].first,cost=G[pozition][i].second;
if(D[pozition]+cost<D[vecin])
D[vecin]=D[pozition]+cost;
}
}
for(i=2;i<=N;i++)
{
if(D[i]==INF)
D[i]=0;
g<<D[i]<<" ";
}
g<<"\n";
}
int main()
{
Read();
Solve();
return 0;
}