Cod sursa(job #2552472)

Utilizator Moldovan_Andrei112002Moldovan Andrei Moldovan_Andrei112002 Data 20 februarie 2020 21:10:06
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 kb
#include <bits/stdc++.h>
using namespace std;
#define inf 1000000007
ifstream fin("dijkstra.in");ofstream fout("dijkstra.out");
int viz[100005],t[100005],n,start,x,y,co,d[100005],m;
vector<pair<int,int> >a[100005];
vector<pair<int,int> >::iterator it;
pair<int,int>var;
pair<int,int>minn;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
void citire()
{
    start=1;
    fin>>n>>m;
    while(fin>>x>>y>>co)
    {
        var.first=y;var.second=co;
        a[x].push_back(var);
        var.first=x;var.second=co;
        a[y].push_back(var);
    }
    for(int i=1;i<=n;i++)
    {
        d[i]=inf;
    }
    d[start]=0;
}
int main()
{
    citire();
    for(it=a[start].begin();it<a[start].end();it++)
    {
        d[it->first]=it->second;
        var.first=d[it->second];
        var.second=it->first;
        q.push(var);
    }
    viz[start]=1;
    while(!q.empty())
    {
        minn=q.top();
        q.pop();
        if(t[minn.second]==0)
            t[minn.second]=start;
        viz[minn.second]=1;
        for(it=a[minn.second].begin();it<a[minn.second].end();it++)
        {
            if(d[it->first]>d[minn.second]+it->second)
            {
                d[it->first]=d[minn.second]+it->second;
                t[it->first]=minn.second;
                var.first=d[it->first];
                var.second=it->first;
                q.push(var);
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(d[i]==inf)
            fout<<"0"<<" ";
        else
            fout<<d[i]<<" ";
    }
    fin.close();fout.close();return 0;
}