Cod sursa(job #1212450)

Utilizator t_@lexAlexandru Toma t_@lex Data 24 iulie 2014 18:19:15
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
# include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int INF=2147483647;
int n,m,i,x,y,c,d[100],t[100],a[100][100],w[100][100];
void read()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
         {
          f>>x>>y>>c;
          a[x][++a[x][0]]=y;
          w[x][y]=c;
         }
    f>>x>>y;
}
void dijkstra()
{
    int z,mini=INF;
    bool b[100];
    for(i=1;i<=n;i++)
        {
         b[i]=0;
         if(w[x][i])
            {
             d[i]=w[x][i];
             t[i]=x;
            }
         else
           d[i]=INF;
         if(d[i]<mini)
             {
              mini=d[i];
              z=i;
             }
        }
    d[x]=0;
    b[x]=1;
    while(mini!=INF)
           {
            b[z]=1;
            if(z==y)
                break;
            for(i=1;i<=a[z][0];i++)
                  if(d[a[z][i]]>d[z]+w[z][a[z][i]])
                     {
                      d[a[z][i]]=d[z]+w[z][a[z][i]];
                      t[a[z][i]]=z;
                     }
            mini=INF;
            for(i=1;i<=n;i++)
                 if(!b[i]&&d[i]<mini)
                     {
                      mini=d[i];
                      z=i;
                     }
           }
}
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;
}