Cod sursa(job #2035297)

Utilizator crion1999Anitei cristi crion1999 Data 9 octombrie 2017 10:33:50
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define INF 0x3f3f3f3f
#define NMAX 50005
using namespace std;
ifstream fi("dijkstra.in"); void input();
ofstream fo("dijkstra.out");

struct nodeData
{
    int node, cost;
    bool operator <(nodeData const &other) const {return cost>other.cost;}
};


int dist[NMAX];
vector<nodeData> graph[NMAX];
priority_queue<nodeData> q;
int N, M;

void Dijkstra(int beg)
{
    dist[beg] = 0;
    nodeData node;
    node.cost = 0;
    node.node = beg;
    q.push(node);

    while(!q.empty())
    {
        int cost = q.top().cost;
        int x = q.top().node;
        q.pop();
        for(auto y:graph[x])
        {
            if(cost + y.cost < dist[y.node])
            {
                dist[y.node] = cost + y.cost;
                q.push(y);
            }
        }
    }
}

int main()
{
    input();
    Dijkstra(1);
    for(int i=2; i<=N; ++i)
    {
        if(dist[i] != INF)
            fo<<dist[i]<<' ';
        else fo<<0<<' ';
    }
}


void input()
{
    fi>>N>>M;
    int a,b,c;
    for(; M; --M)
    {
        fi>>a>>b>>c;
        nodeData node;
        node.cost = c;
        node.node = b;
        graph[a].push_back(node);
        node.node = a;
        graph[b].push_back(node);
    }
    for(int i = 1; i<=N; ++i) dist[i] = INF;
}