Pagini recente » Cod sursa (job #757313) | Cod sursa (job #2010687) | Cod sursa (job #58791) | Cod sursa (job #1609195) | Cod sursa (job #1706599)
#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,long long int> > > graph;
vector <pair < int,long long int> > :: iterator iter;
vector<bool> visited;
vector<long long int> distanta;
queue<long long int> coada;
int n,m;
int main()
{
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.empty())
{
visited[coada.front()]=0;
for(iter=graph[coada.front()].begin(); iter!=graph[coada.front()].end(); iter++)
if(distanta[coada.front()]+iter->second<distanta[iter->first])
{
distanta[iter->first]=distanta[coada.front()]+iter->second;
if(!visited[iter->first])
{
coada.push(iter->first);
visited[iter->first]=1;
}
}
coada.pop();
}
for (int j = 1; j<n; j++)
if(distanta[j]==infinit)
cout<<"0";
else cout<<distanta[j]<<" ";
return 0;
}