Pagini recente » Cod sursa (job #2319848) | Cod sursa (job #2647485) | Cod sursa (job #1632215) | Cod sursa (job #1652213) | Cod sursa (job #3120483)
#include <fstream>
#include <vector>
using namespace std;
struct nod
{
vector <pair<int, int>> vec;
};
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
nod v[50005];
int d[50005], fin[50005];
int n, m;
int main()
{
int INF = (1 << 30) - 1;
f>>n>>m;
int st, dr, c;
for(int i = 1; i<=m; i++)
{
f>>st>>dr>>c;
v[st].vec.push_back(make_pair(dr, c));
}
for(int i = 1; i<=n; i++)
{
d[i] = INF;
}
for(int i = 0; i<v[1].vec.size(); i++)
{
d[v[1].vec[i].first] = v[1].vec[i].second;
}
fin[1] = 1;
d[1] = 0;
d[0] = INF;
for(int k = 1; k<n; k++)
{
int pmax = 0;
for(int i = 1; i<=n; i++)
{
if(fin[i] == 0 && d[i] < d[pmax])
{
pmax = i;
}
}
if(pmax > -1)
{
fin[pmax] = 1;
for(int i = 0; i<v[pmax].vec.size(); i++)
{
if(d[v[pmax].vec[i].first] > d[pmax] + v[pmax].vec[i].second && fin[v[pmax].vec[i].first] == 0)
{
d[v[pmax].vec[i].first] = d[pmax] + v[pmax].vec[i].second;
}
}
}
}
for(int i = 2; i<=n; i++)
{
if(d[i] == INF)
{
g<<0<<" ";
}
else
{
g<<d[i]<<" ";
}
}
return 0;
}