Pagini recente » Cod sursa (job #263513) | Cod sursa (job #1621826) | Cod sursa (job #2943398) | Cod sursa (job #566348) | Cod sursa (job #937200)
Cod sursa(job #937200)
#include<iostream>
#include<fstream>
#include<vector>
#define INFINIT 64000
#define MAX 50000
using namespace std;
struct nod{
int cost,nr;
};
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector < pair < int , int > > graf[MAX];
void dijkstra(int inceput,int n){
unsigned int length[n],it;
int viz[n],B,C,exit=0,minim,poz,i,k=1;
nod parcurgere[n];
for( i = 1 ; i <= n ; i++ ){
length[i]=INFINIT;
viz[i]=0;
}
viz[inceput]=1;
length[inceput]=0;
for( it =0 ; it < graf[inceput].size() ; it++ ){
B=graf[inceput][it].first;
C=graf[inceput][it].second;
length[B]=C;
parcurgere[k].nr=B;
parcurgere[k].cost=C;
k++;
}
while(exit==0){
minim=INFINIT;
poz=0;
for( i = 1 ; i < k ; i++ )
if(inceput!=parcurgere[i].nr)
if(parcurgere[i].cost<minim)
if(viz[parcurgere[i].nr]==0){
minim=parcurgere[i].cost;
poz=parcurgere[i].nr;
}
if(poz==0)
exit=1;
else{
viz[poz]=1;
if(length[poz]==INFINIT)
exit=1;
else
for( it = 0 ; it < graf[poz].size() ; it++ ){
B=graf[poz][it].first;
C=graf[poz][it].second;
if(length[poz]+C<length[B]){
parcurgere[k].nr=B;
length[B]=length[poz]+C;
parcurgere[k].cost=length[B];
k++;
}
}
}
}
for( i = 2 ; i <= n ; i++ ){
if(length[i]==INFINIT)
length[i]=0;
if(inceput!=i)
out<<length[i]<<" ";
}
}
int main(){
int A,B,C,n,m;
in>>n>>m;
for( int j = 1 ; j <= m ; j++ ){
in>>A>>B>>C;
graf[A].push_back(make_pair(B, C));
}
dijkstra(1,n);
return 0;
}