Pagini recente » Cod sursa (job #1067892) | Cod sursa (job #2449993) | Cod sursa (job #2182620) | Cod sursa (job #2249398) | Cod sursa (job #1774205)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#define INF 2000000000
#define nmax 50002
using namespace std;
vector <pair <int, int> > G[nmax];
int tata[nmax], dmin[nmax], n, m;
class compar
{
public:
bool operator () (const int &x, const int &y)
{
return dmin[x]>dmin[y];
}
};
priority_queue <int, vector <int>, compar> q;
void read()
{
ifstream f("dijkstra.in");
f >> n >> m;
for(int i=0, x, y, c; i<m; ++i)
{
f >> x >> y >> c;
G[x].push_back(make_pair(y,c));
}
f.close();
}
void dijkstra()
{
vector <pair <int, int> > :: iterator it;
int i, x;
q.push(1);
for(i=1; i<=n; ++i)
{
dmin[i]=INF;
tata[i]=1;
}
tata[1]=0; dmin[1]=0;
while(!q.empty())
{
x=q.top(); q.pop();
for(it=G[x].begin(); it!=G[x].end(); ++it)
{
if(dmin[it->first] > dmin[x] + it->second)
{
dmin[it->first] = dmin[x] + it->second;
q.push(it->first);
tata[it->first]=x;
}
}
}
}
void out()
{
ofstream g("dijkstra.out");
for(int i=2; i<=n; ++i)
if(dmin[i]!=INF)
g << dmin[i] << ' ';
else
g << 0 << ' ';
g << '\n';
g.close();
}
int main()
{
read();
dijkstra();
out();
return 0;
}