Pagini recente » Cod sursa (job #413861) | Cod sursa (job #3189287) | Cod sursa (job #2905997) | Cod sursa (job #2360772) | Cod sursa (job #1682000)
#include <fstream>
#include<vector>
#include<queue>
#include<utility>
using namespace std;
vector< vector <pair <int, int> > > graph;
vector <bool> visited;
vector <int> val;
int n,m;
void dijkstra (int vertex)
{
if(vertex<0||vertex>n-1)
return;
queue <pair<int,int> > q;
int element;
q.push(make_pair(vertex,0));
visited[vertex]=0;
while(!q.empty())
{
element=q.front().first;
for(int i=0;i<graph[element].size();i++)
{
if(!visited[graph[element][i].first])
{
if(graph[element][i].second+q.front().second<val[graph[element][i].first])
{q.push(make_pair(graph[element][i].first,graph[element][i].second+q.front().second));
val[graph[element][i].first]=graph[element][i].second+q.front().second;
}
else
q.push(make_pair(graph[element][i].first,val[graph[element][i].first]));
visited[graph[element][i].first]=true;
}
}
q.pop();
}
}
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
f>>n>>m;
graph.resize(n);
val.resize(n,250001);
visited.resize(n, false);
for(int i=1;i<=m;i++)
{
int x,y,c;
f>>x>>y>>c;
x--;
y--;
graph[x].push_back(make_pair(y,c));
if(x==0)
{
val[y]=c;
}
}
dijkstra(0);
for(int i=1;i<val.size();i++)
{
g<<val[i]<<" ";
}
return 0;
}