Cod sursa(job #2455540)

Utilizator Catalin2002Catalin Craciun Catalin2002 Data 11 septembrie 2019 21:28:33
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <queue>
#include <fstream>
using namespace std;

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

struct data{

int drum;

queue <int> referinta;
queue <int> referinta_lng;

}v[50005];

void pop_codada(int i)
{
    while(!v[i].referinta.empty())
    {
        int x=v[i].referinta.front();
        v[x].drum=v[i].drum+v[i].referinta_lng.front();
        v[i].referinta.pop();
        v[i].referinta_lng.pop();
    }
}



void functie_de_cel_mai_scurt_drum_de_la_unu_la_orice_alt_nr(int a,int b,int lng)  // stiu forate original numele
{
    if(a==1)
    {
        if(v[b].drum>lng||v[b].drum==0)
           {
               v[b].drum=lng;
               pop_codada(b);
           }

        return;
    }

    if(b==1)
    {
        if(v[a].drum>lng||v[a].drum==0)
           {
               v[a].drum=lng;
               pop_codada(a);
           }

        return;
    }


    if(v[a].drum!=0)
    {
        if(v[b].drum>v[a].drum+lng||v[b].drum==0)
            {
                v[b].drum=v[a].drum+lng;
                pop_codada(b);
            }
        return;
    }

    if(v[b].drum!=0)
    {
        if(v[a].drum>v[b].drum+lng||v[a].drum==0)
            {
                v[a].drum=v[b].drum+lng;
                pop_codada(a);
            }
        return;
    }

    v[a].referinta.push(b);
    v[a].referinta_lng.push(lng);
    v[b].referinta.push(a);
    v[b].referinta_lng.push(lng);

}

int main()
{
    int n,m,i,j,a,b,c;

    fin>>n>>m;

    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        functie_de_cel_mai_scurt_drum_de_la_unu_la_orice_alt_nr(a,b,c);
    }

    for(i=2;i<=n;i++)
        fout<<v[i].drum<<" ";







    return 0;
}