Cod sursa(job #2402288)

Utilizator iliescu99andreiiliescu andrei iliescu99andrei Data 10 aprilie 2019 16:07:34
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#define NMAX 50001
#define INF 20001

using namespace std;

vector<int>dist;
vector<int>viz;
vector< pair<int,int> >graf[NMAX];

int nevizitat_mic(){
    int minim=INF;
    int nr;
    for(int i=1;i<(int)dist.size();i++)
    {
        if(dist[i]<minim)
            if(viz[i]==0)
            {
                minim = dist[i];
                nr = i;
            }
    }
    return nr;
}

void dijkstra(int index)
{
    for(int i=0;i<(int)graf[index].size();i++)
    {
        if(dist[index] + graf[index][i].second < dist[graf[index][i].first])
            dist[ graf[index][i].first ] = dist[index] + graf[index][i].second;
    }
    viz[index] = 1;


}

int main()
{
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");

    int n,m;
    int a,b,d;
    f>>n>>m;
    for(int i=0;i<m;i++){
        f>>a>>b>>d;
        graf[a].push_back(make_pair(b,d));
    }

    for(int i=0;i<=n;i++){
        dist.push_back(INF);
    }
    for(int i=0;i<=n;i++){
        viz.push_back(0);
    }

    dist[1]=0;

    for(int i=0;i<n;i++){
        dijkstra(nevizitat_mic());
    }

    for(int i=2;i<=n;i++)
        g<<dist[i]<<"  ";


    return 0;
}