Cod sursa(job #2240115)

Utilizator AnDrEeA1915Monea Andreea AnDrEeA1915 Data 12 septembrie 2018 16:56:51
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include<fstream>
using namespace std;

#define nMax 100
#define INF 9999999

ifstream fin ("dijkstra.in");
ofstream fout("dijkstra.out");
int src, dest, val, n, m, minn, crt;
int cost [nMax][nMax], viz[nMax], parent[nMax], dist[nMax];
void citire()
{

    fin >> n >> m;
    for(int i = 0; i < m; ++i)
    {
        fin >> src >> dest >> val;
        cost[src][dest]=val;
    }

}

void Dijkstra(int src)
{
    for(int i = 1 ; i <= n ; ++i)
    {
        dist[i] = INF;
        parent[i] = 0;
        viz[i] = 0;
    }
    dist[src] = 0;
    for (int i = 1; i <= n - 1; ++i)
    {
        minn = INF;
        crt = -1;
        for(int j = 1; j <= n; ++j)
        {
            if(!viz[j] && dist[j] < minn)
            {
                minn=dist[j];
                crt=j;
            }
        }
        if(crt == -1)
            break;

        viz[crt]=1;
        for(int j = 1; j <= n; ++j)
        {
            if(cost[crt][j] == 0) continue;

            parent[j] = dist[j] < dist[crt] + cost[crt][j] ? parent[j] : crt;
            dist[j] = dist[j] < dist[crt] + cost[crt][j] ? dist[j] : dist[crt] + cost[crt][j];
        }

    }
}
void afis()
{
    for(int i = 1; i <= n; ++i)
    {
        if(i == n)
            break;
        fout << dist[i+1] << " ";
    }
}
int main()
{
    citire();
    Dijkstra(1);
    afis();
    return 0;
}