Pagini recente » Cod sursa (job #1323874) | Monitorul de evaluare | Cod sursa (job #1348392) | Cod sursa (job #2391123) | Cod sursa (job #1706597)
#include <iostream>
#include<vector>
#include<fstream>
#include<utility>
#include<queue>
#include<stdlib.h>
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int infinit=99999;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector< vector <pair < int, int> > > graph;
vector <pair < int, int> > :: iterator iter;
vector<bool> visited;
vector<int> distanta;
queue<int> coada;
int n,m;
int main()
{
int aux=0;
f>>n>>m;
graph.resize(m);
distanta.resize(n,infinit);
visited.resize(n,0);
distanta[0] = 0;
visited[0] = 1;
coada.push(0);
for (int i=0; i<m; i++)
{
int x,y,z;
f>>x>>y>>z;
x--;
y--;
graph[x].push_back(make_pair(y,z));
}
while(coada.size()>0)
{
aux=coada.front();
coada.pop();
visited[aux]=0;
for(iter=graph[aux].begin(); iter!=graph[aux].end(); iter++)
if(distanta[aux]+iter->second<distanta[iter->first])
{
distanta[iter->first]=distanta[aux]+iter->second;
if(!visited[iter->first])
{
coada.push(iter->first);
visited[iter->first]=1;
}
}
}
for (int j = 1; j<n; j++)
if(distanta[j]==infinit)
g<<"0";
else g<<distanta[j]<<" ";
return 0;
}