Cod sursa(job #1212160)

Utilizator t_@lexAlexandru Toma t_@lex Data 23 iulie 2014 21:56:38
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
# include <fstream>
# include <vector>
# include <set>
# define INF 1<<30
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,i,x,y,c,d[50001];//,t[50001];
vector<int> b;
set<pair<int,int> > a[50001];
set<pair<int,int> >::iterator it;
void dijkstra()
{
    int z,mini;
    for(i=1;i<=n;i++)
         {
          d[i]=INF;
          //v[i]=0;
         }
    d[x]=0;
    b.push_back(x);
    //v[x]++;
    while(b.size())
           {
            z=*b.begin();
            b.erase(b.begin());
            if(true)
                {
                 for(it=a[z].begin();it!=a[z].end();it++)
                      {
                       if(d[(*it).first]>d[z]+(*it).second)
                           {
                            d[(*it).first]=d[z]+(*it).second;
                            //t[(*it).first]=z;
                            b.push_back((*it).first);
                           }
                      }
                }
            else;
              //v[z]--;
           }
}
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
         {
          f>>x>>y>>c;
          a[x].insert(make_pair(y,c));
         }
    //f>>x>>y;
    x=1;
    dijkstra();
    for(i=2;i<=n;i++)
    if(d[i]!=INF)
    g<<d[i]<<' ';
    else g<<"0 ";
    /*while(t[y])
          {
           g<<t[y]<<" ";
           y=t[y];
          }*/
    f.close();
    g.close();
    return 0;
}