Cod sursa(job #1212448)

Utilizator t_@lexAlexandru Toma t_@lex Data 24 iulie 2014 18:18:25
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
# include <fstream>
# include <vector>
# include <queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int INF=2147483647;
int n,m,i,x,y,c,d[50001],t[50001];
vector<pair<int,int> > a[50001];
vector<pair<int,int> >::iterator j;
queue<int> b;
void read()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
         {
          f>>x>>y>>c;
          a[x].push_back(make_pair(y,c));
         }
    f>>x>>y;
}
void dijkstra()
{
    int z,mini;
    for(i=1;i<=n;i++)
          d[i]=INF;
    d[x]=0;
    b.push(x);
    while(b.size())
           {
            z=b.front();
            b.pop();
            for(j=a[z].begin();j!=a[z].end();j++)
                   if(d[(*j).first]>d[z]+(*j).second)
                        {
                         d[(*j).first]=d[z]+(*j).second;
                         t[(*j).first]=z;
                         b.push((*j).first);
                        }
           }
}
void write()
{
    g<<d[y]<<'\n';
    while(t[y])
          {
           g<<t[y]<<" ";
           y=t[y];
          }
}
int main()
{
    read();
    dijkstra();
    write();
    f.close();
    g.close();
    return 0;
}