Pagini recente » Cod sursa (job #2987288) | Borderou de evaluare (job #1567657) | Cod sursa (job #1241906) | Cod sursa (job #1281345) | Cod sursa (job #1122987)
// Infoarena. Arhiva Educationala. Infoarena. Algoritmul Dijkstra.
#include<iostream>
#include<fstream>
#include<limits>
using namespace std;
#define INF 300000000
void init();
void dijkstra();
int N,M,dist[100][100],D[100],visit[100];
int main(){
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
cin>>N>>M;
init();
dijkstra();
for(int i=2;i<=N;i++) cout<<D[i]<<" ";
}
void init(){
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
if(i!=j) dist[i][j]=INF;
int x,y,value;
for(int i=1;i<=M;i++){
cin>>x>>y>>value;
dist[x][y]=value;
}
for(int i=2;i<=N;i++){
D[i]=dist[1][i];
visit[i]=0;
}
visit[1]=1;
}
void dijkstra(){
for(int k=1;k<N;k++){
int minim=INF,aux;
for(int i=2;i<=N;i++)
if(D[i]<minim && !visit[i]){
minim=D[i];
aux=i;
}
visit[aux]=1;
for(int i=2;i<=N;i++){
if(D[i]>D[aux]+dist[aux][i] && !visit[i])
D[i]=D[aux]+dist[aux][i];
}
}
}