Pagini recente » Cod sursa (job #1519179) | Cod sursa (job #2221321) | Cod sursa (job #2640435) | Cod sursa (job #2600480) | Cod sursa (job #2032514)
#include <iostream>
#include <queue>
#include <fstream>
#define INFILE "dijkstra.in"
#define OUTFILE "dijkstra.out"
using namespace std;
ifstream in(INFILE);
ofstream out(OUTFILE);
class INT{
public:
INT(int x,int n){
val=x;
nod=n;
}
bool operator<(INT other){
return val<other.val;
}
int getVal(){
return val;
}
int getNod(){
return nod;
}
private:
int val;
int nod;
};
ostream& operator<<(ostream& os,INT&x){
os<<x.getVal();
return os;
}
struct Comparison{
bool operator()(INT&a,INT&b){
return b<a;
}
};
const int NMAX=5000;
const int INF=30000;
const int start=1;
priority_queue<INT,vector<INT>,Comparison> q;
int C[NMAX][NMAX];
bool Selectat[NMAX];
int dist[NMAX];
int nt;
int mt;
void Read(){
in>>nt>>mt;
for(int i=1;i<=mt;i++){
int x,y,c;
in>>x>>y>>c;
C[x][y]=c;
}
for(int i=1;i<=nt;i++)
dist[i]=INF;
dist[start]=0;
}
void Dijkstra(){
q.push(INT(dist[start],start));
while(!q.empty()){
INT u=q.top();
q.pop();
Selectat[u.getNod()]=true;
int n=u.getNod();
for(int i=1;i<=nt;i++){
if(C[n][i]!=0&&dist[i]>dist[n]+C[n][i]&&!Selectat[i]){
dist[i]=dist[n]+C[n][i];
q.push(INT(dist[i],i));
}
}
}
}
void Afisare(){
for(int i=2;i<=nt;i++)
out<<dist[i]<<" ";
}
int main()
{
Read();
Dijkstra();
Afisare();
return 0;
}