Pagini recente » Diferente pentru utilizator/blacknesta intre reviziile 62 si 61 | Cod sursa (job #657331) | Istoria paginii utilizator/necromantress | Cod sursa (job #2011198) | Cod sursa (job #2017214)
#include <iostream>
#include <fstream>
#include <climits>
#define NMAX 50000
#define INF LONG_MAX
#define INFILE "dijkstra.in"
#define OUTFILE "dijkstra.out"
using namespace std;
typedef long ints;
int n;
int m;
ifstream in(INFILE);
ofstream out(OUTFILE);
ints C[NMAX][NMAX];
ints parent[NMAX];
ints d[NMAX];
bool M[NMAX];
void Initializare(){
in>>n>>m;
for(int i=1;i<=n;i++){
int x,y;
ints c;
in>>x>>y>>c;
C[x][y]=c;
}
for(int i=1;i<=n;i++){
d[i]=INF;
parent[i]=1;
}
d[1]=0;
}
int MinVf(){
ints Min=INF;
int i_min;
for(int i=1;i<=n;i++){
if(d[i]<Min&&M[i]==false){
Min=d[i];
i_min=i;
}
}
return i_min;
}
int Dijkstra(){
for(int i=1;i<=n-1;i++){
int u=MinVf();
M[u]=true;
for(int v=1;v<=n;v++){
if(C[u][v]!=0&&M[v]==false&&d[v]>d[u]+C[u][v]){
d[v]=d[u]+C[u][v];
parent[v]=u;
}
}
}
}
void Afisare(){
for(int i=2;i<=n;i++)
out<<d[i]<<" ";
}
int main()
{
Initializare();
Dijkstra();
Afisare();
return 0;
}