Pagini recente » Cod sursa (job #2025556) | Cod sursa (job #1239483) | Cod sursa (job #2737769) | Cod sursa (job #2238775) | Cod sursa (job #1360916)
#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];
priority_queue <int> 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=1;i<=n;i++) // initializare distante
if(i==start) D[i]=0;
else D[i]=(1<<30);
}
void Dijkstra(int s)
{
vector <Muchie> :: iterator it;
int u;
q.push(s);
Seen[s]=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(start);
for(int i=1;i<=n;i++) // afisare
if(i!=start) fout<<D[i]<<" ";
}