Cod sursa(job #2634683)

Utilizator irimia_alexIrimia Alex irimia_alex Data 11 iulie 2020 23:48:49
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <stdio.h>
#include <vector>
#include <utility>
#include <queue>
#define NMAX 50001

using namespace std;

class Compare {
public:
    bool operator()(pair<int, int> x, pair<int, int> y) {
        return x.second > y.second;
    }
};

vector<pair<int, int>> g[NMAX];

int Dijkstra(int i, int j) {
    priority_queue<pair<int,int>,vector<pair<int,int>>,Compare> q;
    int viz[NMAX] = { 0 };
    q.push({ i,0 });
    viz[i] = 1;
    while (!q.empty()) {
        pair<int, int> top = q.top();
        if (top.first == j)
            return top.second;
        q.pop();
        for (auto x : g[top.first]) {
            if (!viz[x.first]) {
                viz[x.first] = 1;
                q.push({ x.first,top.second + x.second });
            }
        }
    }
}

int main()
{
    FILE* fin, * fout;
    fin=fopen("dijkstra.in", "r");
    fout=fopen("dijkstra.in", "w");

    int n, m;
    fscanf(fin, "%i %i", &n, &m);
    while (m--) {
        int x, y, val;
        fscanf(fin, "%i %i %i", &x, &y, &val);
        g[x].push_back({ y,val });
        g[y].push_back({ x,val });
    }

    for (int i = 2;i <= n;++i)
        fprintf(fout,"%i ", Dijkstra(1, i));

    return 0;
}