Pagini recente » Cod sursa (job #676073) | Cod sursa (job #2202071) | Cod sursa (job #576130) | Cod sursa (job #1829411) | Cod sursa (job #755774)
Cod sursa(job #755774)
#include<iostream>
#include<fstream>
#define infinit 1000000000
using namespace std;
int n,m,p;
int dr[50010][50010],vect_drum[50010],viz[50010];
void initializare(){
int i,j,x,y,z;
ifstream f("dijkstra.in");
f>>n>>m;
p=1;
for(int i=1;i<=m;i++){
f>>x>>y>>z;
dr[x][y]=z;
dr[y][x]=z;
}
for(i=1;i<=n;i++)
{
if(i==p || dr[p][i]==0)
vect_drum[i]=infinit;
else
vect_drum[i]=dr[p][i];
viz[i]=0;
}
}
void dijkstra(){
int i,ok=1,ok_verificare;
int min,min_indice;
viz[p]=1;
while(ok){
min=infinit;
min_indice=-1;
for(i=1;i<=n;i++)
if(viz[i]==0 && vect_drum[i]<min)
{
min=vect_drum[i];
min_indice=i;
}
if(min_indice==-1)
ok=0;
else
{
viz[min_indice]=1;
ok_verificare=0;
for(i=1;i<=n;i++)
if(vect_drum[i]>dr[p][min_indice]+dr[min_indice][i] && dr[p][min_indice] && dr[min_indice][i])
{
vect_drum[i]=dr[p][min_indice]+dr[min_indice][i];
ok_verificare=1;
}
if(ok_verificare==0)
ok=0;
}
}
}
void afisare(){
ofstream g("dijkstra.out");
for(int i=1;i<=n;i++)
if(i!=p)
if(vect_drum[i]==infinit)
g<<0<<" ";
else
g<<vect_drum[i]<<" ";
}
int main(){
initializare();
dijkstra();
afisare();
return 0;
}