Pagini recente » Istoria paginii utilizator/cozmarares | Cod sursa (job #1742162) | Cod sursa (job #1356018) | Cod sursa (job #2387811) | Cod sursa (job #2377140)
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 50001
#define inf 1<<30
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int viz[NMAX],d[NMAX];
struct compara
{
bool operator()(int x,int y)
{
return d[x]>d[y];
}
};
priority_queue <int, vector <int> , compara>Q;
vector <pair<int,int> > lista[NMAX];
int n,m;
void dj(int nod)
{
for(int i=1; i<=n; ++i) d[i]=inf;
d[nod]=0;
viz[nod]=1;
Q.push(nod);
while(!Q.empty())
{
int newnod=Q.top();
Q.pop();
viz[newnod] = 0;
for(size_t i=0; i< lista[newnod].size(); ++i)
{
int vecin =lista[newnod][i].first;
int cost =lista[newnod][i].second;
if(cost + d[newnod] < d[vecin])
{
d[vecin]= cost + d[newnod];
if(viz[newnod]==0)
{
Q.push(vecin);
viz[vecin]=1;
}
}
}
}
}
int main()
{
int x,y,c;
f>>n>>m;
for(int i=1; i<=m; ++i)
{
f>>x>>y>>c;
lista[x].push_back(make_pair(y,c));
}
dj(1);
for(int i=2;i<=n;i++)
{
if(d[i]!=inf)
g<<d[i]<<" ";
else
g<<"0 ";
}
return 0;
}