Pagini recente » Cod sursa (job #2753142) | Cod sursa (job #2135736) | Cod sursa (job #2238776) | Cod sursa (job #2081898) | Cod sursa (job #1360933)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#define Dmax 50010
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,start;
int D[Dmax];
bool Seen[Dmax]; // vizitari
struct Muchie
{
int j; // urm nod
int c; // cost
};
vector <Muchie> Lista[Dmax];
struct cmp
{
bool operator() (int &a, int &b)
{
return D[a] > D[b];
}
};
priority_queue<int, vector<int>, cmp> q;
void Citire()
{
int i,x;
Muchie e;
start=1; // incepem din nod 1, in acest caz
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>e.j>>e.c;
Lista[x].push_back(e);
}
for(i=2;i<=n;i++) // initializare distante
D[i] = (1<<30);
}
void Dijkstra()
{
vector <Muchie> :: iterator it;
int u;
q.push(1);
Seen[1]=true;
while(!q.empty())
{
u=q.top();
q.pop();
Seen[u]=false;
for(it=Lista[u].begin();it!=Lista[u].end();it++)
{
if( D[u] + it->c < D[it->j] )
{
D[it->j] = D[u] + it->c;
if(Seen[it->j]==false)
{
q.push(it->j);
Seen[it->j]=true;
}
}
}
}
}
int main()
{
Citire();
Dijkstra();
for(int i=2;i<=n;i++) // afisare
fout<<D[i]<<" ";
}