Cod sursa(job #2200557)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 1 mai 2018 19:17:19
Problema Algoritmul lui Dijkstra Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.71 kb
#include <stdio.h>
#include <stdlib.h>

int nr_noduri;
int nr_arcuri;
int cost[1001][1001];
int dist[1001];
int tata[1001];
int vis[1001];


int main()
{
    FILE *f1 = fopen("dijkstra.in", "r");
    FILE *f2 = fopen("dijkstra.out", "w");

    int i, nod, vecin, nod1, nod2, val_cost;

    fscanf(f1, "%d%d", &nr_noduri, &nr_arcuri);

    for (nod1 = 1; nod1 <= nr_noduri; nod1++)
        for (nod2 = 1; nod2 <= nr_noduri; nod2++)
            cost[nod1][nod2] = 999999999;

    for (i = 0; i < nr_arcuri; i++)
    {
        fscanf(f1, "%d%d%d", &nod1, &nod2, &val_cost);
        cost[nod1][nod2] = val_cost;
        //cost[nod2][nod1] = val_cost;
    }

    for (i = 0; i < nr_noduri; i++)
    {
        dist[i] = 999999999;
    }

    dist[1] = 0;

    for (i = 1; i <= nr_noduri; i++)
    {
        int dist_min = 999999999;
        int nod_min = 0;

        for (nod = 1; nod <= nr_noduri; nod++)
        {
            if (vis[nod] == 0 && dist[nod] < dist_min)
            {
                dist_min = dist[nod];
                nod_min = nod;
            }
        }

        if (dist_min == 999999999)
            break;
        vis[nod_min] = 1;

        for (vecin = 1; vecin <= nr_noduri; vecin++)
        {
            if (vis[vecin] == 0 && cost[nod_min][vecin] != 999999999)
            {
                if (dist[vecin] > dist[nod_min] + cost[nod_min][vecin])
                {
                    dist[vecin] = dist[nod_min] + cost[nod_min][vecin];
                }
            }
        }
    }

    for (nod = 2; nod <= nr_noduri; nod++)
    {
        if (dist[nod] == 999999999)
            dist[nod] = 0;
        fprintf(f2, "%d ", dist[nod]);
    }
}