Cod sursa(job #2345111)

Utilizator dragossofiaSofia Dragos dragossofia Data 15 februarie 2019 21:50:05
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;
int s,d[101],pred[101],n,viz[101];
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector <int>v[101],l[101];
void citire()
{fin>>n>>s;
 int x,y,p;
 while(fin>>x>>y>>p)
 {v[x].push_back(y);
  l[x].push_back(p);
 }

}
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >h;
void disktra()
{int i;
 for(i=1;i<=n;i++)
    d[i]=(1<<30);
 d[s]=0;
 h.push(make_pair(0,s));
 int nod,w;
 while(!h.empty())
 {nod=h.top().second;
  h.pop();
  if(viz[nod])continue;
  else viz[nod]=1;
  for(i=0;i<v[nod].size();i++)
       {w=v[nod][i];
        if(d[w]>d[nod]+l[nod][i])
            {d[w]=d[nod]+l[nod][i];
             pred[w]=nod;
             h.push(make_pair(d[w],w));
            }
       }

 }
 for(i=1;i<=n;i++)
    if(d[i]!=(1<<30))fout<<d[i]<<" ";
    else fout<<-1<<" ";
}
int main()
{   citire();
    disktra();;

    return 0;
}