Cod sursa(job #1212162)

Utilizator t_@lexAlexandru Toma t_@lex Data 23 iulie 2014 22:03:00
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
# include <fstream>
# define INF 1<<30
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,i,x,y,c,d[50001],a[50001][100],w[2501][2501];
void dijkstra()
{
    int z,mini;
    bool b[50001];
    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;
            x=z;
            for(i=1;i<=a[x][0];i++)
                  if(d[a[x][i]]>d[x]+w[x][a[x][i]])
                     {
                      d[a[x][i]]=d[x]+w[x][a[x][i]];
                      //t[a[x][i]]=x;
                     }
            mini=INF;
            for(i=1;i<=n;i++)
                 if(!b[i]&&d[i]<mini)
                     {
                      mini=d[i];
                      z=i;
                     }
           }
}
int main()
{
    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;
    x=0;
    y=0;
    dijkstra();
    for(i=2;i<=n;i++)
    g<<d[i]<<' ';
    /*while(t[y])
          {
           g<<t[y]<<" ";
           y=t[y];
          }*/
    f.close();
    g.close();
    return 0;
}