Pagini recente » Istoria paginii runda/simulareoji2015p2/clasament | Cod sursa (job #1068951) | Cod sursa (job #219858) | Cod sursa (job #1492814) | Cod sursa (job #2384961)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
#define INF 100100
#define NMAX 50100
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int viz[NMAX];
int n,m;
int Dist[NMAX];
vector <pair <int,int> > graf[NMAX];
void citireGraf(int m)
{
int i,x,y,c;
for(i = 1; i <= m; i++)
{
f>>x>>y>>c;
graf[x].push_back(make_pair(y,c));
}
}
void ini(int x)
{
int i;
for(i = 1; i <= n; i++)
Dist[i] = INF;
Dist[x]=0;
}
int main()
{
int top,lim,i;
f>>n>>m;
citireGraf(m);
ini(1);
queue <int> C;
C.push(1);
viz[1] = 1;
while(C.empty()==false)
{
top = C.front();
C.pop();
lim = graf[top].size();
for(i = 0; i < lim; i++)
{
int vecin = graf[top][i].first;
int cost = graf[top][i].second;
if(Dist[top] + cost < Dist[vecin])
{
Dist[vecin] = Dist[top] +cost;
if(viz[vecin] == 0)
{
C.push(vecin);
viz[vecin] = 1;
}
}
}
}
for(i=2;i<=n;i++)
{
if(Dist[i] == INF)
g<<0<<" ";
else
g<<Dist[i]<<" ";
}
return 0;
}