Cod sursa(job #1195208)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 6 iunie 2014 17:48:45
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#define infinite 1<<30
using namespace std;
FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");
int n,m,c[250001],u,d[50001],x[3][250001],nr,st[50001];



void creeaza(int a,int b,int cost)
{nr++;
x[0][nr]=b;
x[2][nr]=cost;
x[1][nr]=st[a];
st[a]=nr;
}

void adi()
{int i,j;
c[1]=1;
u=1;
i=1;
while (i<=u) {j=st[c[i]];
                      while (j!=0)
                                {if (d[c[i]]+x[2][j]<d[x[0][j]]) {d[x[0][j]]=d[c[i]]+x[2][j];
                                                                                 c[++u]=x[0][j];
                                                                                }
                                  j=x[1][j];
                                  }
                      ++i;
                      }
}
int main()
{int i,x,y,cost;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=m;i++)  {fscanf(f,"%d %d %d",&x,&y,&cost);
                                  creeaza(x,y,cost);
                                 }
for (i=2;i<=n;i++) d[i]=infinite;
adi();
for (i=2;i<=n;i++) if (d[i]!=infinite) fprintf(g,"%d ",d[i]);
                                          else fprintf(g,"0 ");
return 0;
}