Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 999
- #define NM 100
- int N, M, Nod1, Nod2, cost, vizitat[NM], dist[MAX], pred[NM], graf[NM][NM];
- int print_drum(int start, int spre, int pred[]){
- if (start != spre){
- print_drum(start, pred[spre], pred);
- }
- printf("%d ", spre);
- }
- void Dijkstra(int n, int graf[NM][NM], int start_node){
- for(int i = 0; i < N; i++){
- dist[i] = MAX;
- pred[i] = 0;
- }
- dist[start_node] = 0;
- int nodCurent = start_node;
- vizitat[nodCurent] = 1;
- for(int i = 0; i < n; i++){
- int min = MAX;
- int urm = 0;
- for(int i = 1; i < n; i++){
- if(graf[nodCurent][i] != 0){
- int d = dist[nodCurent] + graf[nodCurent][i];
- if(d < dist[i] && vizitat[i] == 0){
- dist[i] = d;
- pred[i] = nodCurent;
- }
- }
- if(vizitat[i] == 0 && dist[i] <= min){
- min = dist[i];
- urm = i;
- }
- }
- nodCurent = urm;
- vizitat[nodCurent] = 1;
- }
- print_drum(1,2,pred);
- }
- int main(){
- scanf("%d %d", &N,&M);
- for (int i = 0; i < M; i++){
- scanf("%d %d %d", &Nod1, &Nod2, &cost);
- }
- for(int i = 1; i < M; i++)
- for(int j = i + 1; j < M; j++)
- {
- graf [i][j] = graf[j][i] = cost;
- }
- Dijkstra(N, graf[M][M] ,1);
- return 0;
- }
Add Comment
Please, Sign In to add comment