Cod sursa(job #2853487)

Utilizator taiwolfgodBogdan Tailup taiwolfgod Data 20 februarie 2022 12:40:14
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>

using namespace std;

#define lim 50100

struct node
{
    int direction;
    int cost;
};

vector<node> G[lim];
///node,cost
priority_queue<node> q;
int N,M;
int rezultat[lim];
bool vizitat[lim];

void djikstra()
{
    rezultat[1] = 0;
    q.push({1, 0});

    while (!q.empty())
    {
        /// use node as currentNode, direction being x not y in this case
        node top = q.top();
        q.pop();
        if(!vizitat[top.direction])
        {
            vizitat[top.direction] = true;
            for(auto nod : G[top.direction])
            {
                if(rezultat[nod.direction] > rezultat[top.direction] + nod.cost )
                {
                    rezultat[nod.direction] = rezultat[top.direction] + nod.cost;
                    q.push({nod.direction,-rezultat[nod.direction]});

                }
            }
        }
    }
}

int main() {

    ifstream fin("djikstra.in");
    ofstream fout("djikstra.out");

    int source, destination, cost;
    int count = 0;
    fin >> N >> M;

    for (int i = 1; i <= N; i++) {
        fin >> source >> destination >> cost;
        G[source].push_back({destination, cost});
    }

    for (int i = 1; i <= N; i++)
        rezultat[i] = INT_FAST16_MAX;

    djikstra();

    for(int i = 2 ; i <= N ; i++)
    {
        if(rezultat[i] == INT_FAST16_MAX)
            fout<<0<<' ';
        fout<<rezultat[i]<<' ';

    }


    fin.close();
    fout.close();
    return 0;
}