Cod sursa(job #1696683)

Utilizator misu012Pop Mihai misu012 Data 29 aprilie 2016 17:09:34
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#define SIZE 50005
#define INF 184467440737095516
using namespace std;
    ifstream f ("dijkstra.in");
    ofstream g ("dijkstra.out");
class Dijkstra
{
    long long n;//nr de noduri
    long long m;//nr de muchii
    long long d[SIZE];//distantele de la nodul star la nodul i+1
    int viz[SIZE];
    vector<vector< pair<long long,long long> > > A;

public:
    Dijkstra();
    void citire();
    void afisare();
    void dijkstra(long long x);

};

Dijkstra::Dijkstra()
{
    n=0;
    m=0;
}

void Dijkstra::citire()
{
    long long x,y,z;

    f>>n>>m;
    A.resize(n+1);
    for(long long i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        A[x].push_back(make_pair(-z,y));
        A[y].push_back(make_pair(-z,x));
    }

}

void Dijkstra::afisare()
{
    for(long long i=2;i<=n;i++)
        if(d[i]==INF)
            g<<0<<" ";
        else
            g<<d[i]<<" ";
}


void Dijkstra::dijkstra(long long x)
{
    int nr=0;
    for(int i=2;i<=n;i++)
        d[i]=INF;

    d[1]=0;
    viz[1]=1;
    int  k=1;
    while(k<n)
    {

        int ct=0;

        while(ct<A[k].size())
        {

            if(d[A[k][ct].second]>d[k]-A[k][ct].first)
                d[A[k][ct].second]=d[k]-A[k][ct].first;

            ct++;
        }

        k++;

    }


}

int main()
{
    Dijkstra D;
    D.citire();
    D.dijkstra(1);
    D.afisare();
    return 0;
}