Pagini recente » Cod sursa (job #573265) | Cod sursa (job #2942298) | Cod sursa (job #2968543) | Cod sursa (job #771409) | Cod sursa (job #793352)
Cod sursa(job #793352)
#include <iostream>
#include <fstream>
using namespace std;
const int maxsize = 100;
const int inf = 10000;
struct graf{
int nod;
int cost;
graf *urm;
};
graf *list[maxsize], *aux, *coada[maxsize];
int n ; // numarul de noduri;
int m; // numarul de linii;
ifstream f("dijkstra.in"); // fisier de intrare
ofstream g("dijkstra.out"); // fisier de iesire
int viz[maxsize], drum[maxsize];
//////////////ADAUGA IN LISTA////////////
inline void add(int a, int b, int c){
if(list[a]!= NULL){
aux = new graf;
aux->urm = NULL;
aux->nod = b;
aux->cost = c;
coada[a]->urm = aux;
coada[a] = aux;
} else{
list[a] = new graf;
list[a]->urm = NULL;
list[a]->nod = b;
list[a]->cost = c;
coada[a] = list[a];
}
}
///////////MINIM NEVIZITAT ///////////////
int min_nev(){
int min = inf;
int index_min = 0;
for(int i=1; i<=n; i++){
if(!viz[i] && drum[i]< min){
min = drum[i];
index_min = i;
}
}
return index_min;
}
//////////DJIKSTRA ////////////
inline void djikstra(){
viz[1] = 1;
drum[1] = 0;
for(int i=2; i<=n; i++)
drum[i] = inf;
aux = list[1];
while(aux){
drum[aux->nod]= aux->cost;
aux = aux->urm;
}
while(min_nev()){
int index_min = min_nev();
aux = list[index_min];
viz[index_min] = 1;
while(aux){
if(!viz[aux->nod]){
if(drum[aux->nod] > drum[index_min] + aux->cost){
drum[aux->nod] = drum[index_min] + aux->cost;
}
}
aux = aux->urm;
}
}
}
////////// FUNCTIE DE CITIRE //////
inline void read(){
f >> n >> m;
for(int i=1; i<=m; i++){
int a, b, c;
f >> a >> b >> c;
add(a,b,c);
add(b,a,c);
}
f.close();
}
int main(){
read();
djikstra();
for(int i=2; i<=n; i++)
g << drum[i] <<" ";
g.close();
return 0;
}