Pagini recente » Cod sursa (job #2133672) | Cod sursa (job #2614428) | Cod sursa (job #2108811) | Cod sursa (job #2241357) | Cod sursa (job #1360952)
#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;*/
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] = (1<<30);
}
void Dijkstra(int s)
{
vector <Muchie> :: iterator it;
int u;
q.push(s);
Seen[s]=true;
while(!q.empty())
{
//u=q.top();
u=q.front();
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)
if(D[i] == (1<<30)) fout<<"0"<<" ";
else fout<<D[i]<<" ";
}
}