Cod sursa(job #1215324)

Utilizator t_@lexAlexandru Toma t_@lex Data 31 iulie 2014 21:41:14
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
# include <fstream>
# include <vector>
# include <queue>
# define DIM 100
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int INF=(1LL*1<<31)-1;
int n,m,i,x,y,d[DIM],t[DIM];
vector<pair<int,int> > a[DIM];
queue<int> c;
void read()
{
    int w;
    f>>n>>m;
    for(i=1;i<=m;i++)
         {
          f>>x>>y>>w;
          a[x].push_back(make_pair(y,w));
         }
    f>>x>>y;
}
void dijkstra()
{
    int z;
    bool b[DIM];
    for(i=1;i<=n;i++)
         {
          b[i]=0;
          d[i]=INF;
         }
    c.push(x);
    b[x]=1;
    d[x]=0;
    while(!c.empty())
           {
            z=c.front();
            c.pop();
            b[z]=0;
            for(i=0;i<a[z].size();i++)
                if(d[a[z][i].first]>d[z]+a[z][i].second)
                      {
                       d[a[z][i].first]=d[z]+a[z][i].second;
                       t[a[z][i].first]=z;
                       if(!b[a[z][i].first])
                           {
                            c.push(a[z][i].first);
                            b[a[z][i].first]=1;
                           }
                      }
           }
}
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;
}